Оболочка mon go работает с аутентификацией клиента PKI, но не с mongoimport - PullRequest
0 голосов
/ 30 января 2020

Я только что завершил настройку аутентификации клиента PKI x.509 для MongoDB 3.6. Все работает хорошо; Я могу подключиться к mon go с моего express сервера с помощью аутентификации клиента, и он прекрасно работает и при подключении к оболочке mon go.

Вот пример того, как я подключаюсь к мон go из оболочки:

mongo \
--host localhost:27017 \
--ssl \
--sslPEMKeyFile /ssl/client.pem \
--sslCAFile /ssl/ca.pem \
--authenticationDatabase '$external' \
--authenticationMechanism MONGODB-X509 \
--sslAllowInvalidHostnames

Он успешно подключается, и вот вывод:

authenticate db: $external { authenticate: 1, mechanism: "MONGODB-X509", user: "emailAddress=certs@example.com,CN=client1,OU=ou_clients,O=Example Co,L=Boston,ST=MA,C=US", $db: "$external" }
mongo      | 2020-01-30T13:49:18.881+0000 I ACCESS   [conn2] Successfully authenticated as principal emailAddress=certs@example.com,CN=client1,OU=ou_clients,O=Example Co,L=Boston,ST=MA,C=US on $external from client xxx.xx.x.x:xxxxx

Однако у меня возникают проблемы с аутентификацией при использовании mongoimport. Это команда, которую я запускаю для импорта некоторых данных из JSON в мою базу данных:

mongoimport \
    --host localhost:27017 \
    --ssl \
    --sslPEMKeyFile /ssl/client.pem \
    --sslCAFile /ssl/ca.pem \
    --authenticationDatabase '$external' \
    --authenticationMechanism MONGODB-X509 \
    --sslAllowInvalidHostnames \
    --db mydb \
    --collection MyCollection \
    --type json \
    --file /data.json \
    --jsonArray

Когда я запускаю это, я получаю следующую ошибку:

Unauthorized: not authorized on mydb to execute command { insert: "MyCollection", writeConcern: { getLastError: 1, w: 1 }, ordered: false, $db: "mydb" }

Вот пользователь, соответствующий сертификату, который я использую: '

{ "_id" : "$external.emailAddress=certs@example.com,CN=client2,OU=ou_clients,O=Example Co,L=Boston,ST=MA,C=US", "userId" : UUID("2c8beb7c-acf5-4ede-a6f5-e9ae8e6db336"), "user" : "emailAddress=certs@example.com,CN=client2,OU=ou_clients,O=Example Co,L=Boston,ST=MA,C=US", "db" : "$external", "credentials" : { "external" : true }, "roles" : [ { "role" : "readWrite", "db" : "mydb" } ] }

Я смог использовать оболочку mon go для подключения того же пользователя и вставки записей в mydb.MyCollection, поэтому я предполагая, что проблема не в том, как мои разрешения настроены, я могу ошибаться.

Я пришел к выводу, что ошибка может быть в том, как я использую mongoimport, потому что, когда я пытаюсь чтобы использовать его, я никогда не вижу сообщения в журнале процесса mon go, говорящего «Успешно аутентифицирован как принцип ...», как я делаю, когда я подключаюсь через оболочку mon go, как показано выше.

Так что это почти заставляет меня думать, что это вообще не аутентификация через аутентификацию клиента, а просто отсутствие правильных разрешений для вставки.

Я использовал эту документацию при сборке команды mongoimport.

Кто-нибудь заметил какие-либо проблемы? Или, может быть, я просто неправильно использую mongoimport? 1031 *

...