Я пытаюсь войти в MongoDB, используя имя пользователя активного каталога. Мы используем Percona для MongoDB, но я считаю, что это действительно должно быть очень похоже на обычную аутентификацию MongoDB 5.x.
Мы пробовали вариацию за вариацией. Вот самая последняя попытка:
сеть:
тлс:
режим: требуетсяTLS
allowConnectionsWithoutCertificates: правда
безопасность:
авторизация: включена
LDAP:
Автор:
queryTemplate: "dc=domain,dc=local??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))"
серверы: "мой-dc.domain.local"
транспортная безопасность: нет
связывать:
queryUser: "CN=percona,OU=Accounts,OU=My Site,DC=domain,DC=local"
queryPassword: "суперсекретно"
userToDNMapping: >-
[
{
совпадение: "(.+)",
ldapQuery: "dc=domain,dc=local??sub?(&(objectClass=organizationalPerson)(sAMAccountName={0}))"
}
]
установитьпараметр:
Механизмы аутентификации: "ОБЫЧНАЯ"
Ошибка, которую я получаю:
{"t":{"$date":"2022-05-27T21:31:24.896+00:00"},"s":"I", "c":"ДОСТУП", "id":29052, "ctx":"conn349795","msg":"Сообщение сервера SASL: ({priority}) {msg}","attr":{"priority":2,"msg":"Проверка пароля не удалась"}}
{"t":{"$date":"2022-05-27T21:31:24.896+00:00"},"s":"I", "c":"ДОСТУП", "id":20249, "ctx":"conn349795","msg":"Аутентификация не удалась","attr":{"механизм":"PLAIN","спекулятивный":false,"principalName":"brad.test","authenticationDatabase": "$external","remote":"10.40.14.16:42930","extraInfo":{},"error":"OperationFailed: шаг SASL не выполнен: (пользователь не найден)"}}
Теперь из двух приведенных выше ошибок можно предположить, что пароль был введен неправильно, но я четырежды проверил правильность пароля в mongod.conf. Я также проверил правильность имени пользователя и пароля пользователя, с которым я подключаюсь к mogodb.
Также есть упоминание о том, что пользователь не найден, но если я возьму свое имя пользователя и запрошу активный каталог напрямую, используя: (objectClass=organizationalPerson)(sAMAccountName=brad.test), я верну свою учетную запись.
Аналогичным образом, если я запрашиваю активный каталог, используя: (objectClass=group)(member:1.2.840.113556.1.4.1941:=CN=Brad - Test,OU=Foo,OU=Bar,DC=domain,DC=local) я получаю список групп, в которых я состою.
Я думаю, что мой запрос ldap и мой шаблон запроса верны.
Я должен упомянуть, что в базе данных администратора mongo определено следующее, и моя учетная запись является членом этой группы:
var admin = db.getSiblingDB("admin")
admin.createRole(
{
role: "CN=MongoDB Users,OU=Groups,OU=My Site,DC=domain,DC=local",
привилегии: [],
роли: [ "userAdminAnyDatabase" ]
}
)
Если я проверю журнал безопасности на сервере Active Directory, я увижу
Компьютер попытался проверить учетные данные для учетной записи.
Пакет аутентификации: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Учетная запись для входа: percona
Исходная рабочая станция: MY-DC
Код ошибки: 0x0
Код ошибки 0x0 означает, что вход выполнен успешно.
Теперь я не вижу никаких попыток входа в систему для моей учетной записи пользователя brad.test - возможно, это указывает на то, что он не обращается к AD для аутентификации моего пользователя, но я не уверен, почему. К сожалению, существует так много документации как для монго, так и для percona для монго, которая различается в зависимости от того, является ли ваш пользователь AD или LDAP. Трудно было найти работающий пример.
Я чувствую, что что-то маленькое должно быть неправильным, но я не понимаю, что именно. Кто-нибудь еще делал это раньше и есть какие-либо указатели или предложения?
Спасибо
Брэд