Leos Literak
Leos Literak

Reputation: 9474

Mongoexport auth error using mechanism "SCRAM-SHA-1"

I have taken over undocumented Mongo 4.4.8 cluster (PSA). I am trying to tidy it up and test thouroughly.

An original connection string:

MONGODB_URI=mongodb://${USER}:${PASS}@10.0.0.3:27017,10.0.0.6:27017,10.0.0.2:27017/bud?replicaSet=bud-replica&authSource=admin

I have enabled localhost and socket connection. I can log in from cmdline with

mongo -u ${USER} -p ${PASS}
MongoDB shell version v4.4.8
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("492e331b-417e-458a-83c7-9db6eaae0869") }
MongoDB server version: 4.4.8

I can switch db to bud and perform the queries. But if I run just

mongo

then the authentication with the same credentials does not work:

bud-replica:PRIMARY> db.auth('admin','admin');
Error: Authentication failed.
0

I tried to search for users but shows there arent any:

bud-replica:PRIMARY> db.getUsers()
[ ]
bud-replica:PRIMARY> use bud
switched to db bud
bud-replica:PRIMARY> db.getUsers()
[ ]

This is mongod.conf security part:

security:
   authorization: enabled
   keyFile: "/etc/bud-rs"

Finally I need to export my data before doing experiments. Though the cmd line interface looks similar, mongoexport cannot fetch the data, regardless I set user/password or skip these arguments.

mongoexport -h localhost --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray > accidents.json
2021-08-25T19:30:30.631+0200    could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.
mongoexport -h localhost --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray --authenticationDatabase “admin” > accidents.json
2021-08-25T19:36:18.738+0200    could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.
root@10:~# mongoexport -h localhost --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray --authenticationDatabase “bud” > accidents.json
2021-08-25T19:38:21.174+0200    could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.

I am really confused and I failed to find a solution on Google or SO.

Second relevant question:

If I need to create new user, shall I do it on all replicas or it is automatically synchronized?

1st update

This is the workaround, but my questions are still valid. I want to understand.

root@10:~# mongoexport --db=bud -u ${USER} -p ${PASS} -c=accidents --jsonArray "mongodb://admin:[email protected]:27017/bud?authSource=admin" > accidents.json
2021-08-25T20:46:54.777+0200    connected to: mongodb://[**REDACTED**]@10.0.0.3:27017/bud?authSource=admin
2021-08-25T20:46:55.778+0200    [........................]  bud.accidents  0/4379  (0.0%)
2021-08-25T20:46:56.497+0200    [########################]  bud.accidents  4379/4379  (100.0%)
2021-08-25T20:46:56.497+0200    exported 4379 records

2nd update

bud-replica:PRIMARY> use admin
bud-replica:PRIMARY> show collections
system.keys
system.users
system.version
bud-replica:PRIMARY> db.system.users.find()
{ "_id" : "admin.admin", "userId" : UUID("769e4f5c-6f46-4153-857e-47d7d8730066"), "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "32/AP4019eome36j8n

Upvotes: 35

Views: 84524

Answers (6)

I was getting this same error when trying to restore a backup on an instance running in a docker container. So, I added '--authenticationDatabase=admin' in command and successfull runned!

mongorestore --uri="mongodb://<user>:<password>@localhost:27017" \
   --db=my-database-name \
   --dir=/home/user/db/bakup/database-name-restore \
   --authenticationDatabase=admin

This command part to direct it to use the admin database for auth as well!

Upvotes: 2

danilo
danilo

Reputation: 9325

This error can be shown if you are using a wrong admin name.

Upvotes: 0

amirabbas khoshbayan
amirabbas khoshbayan

Reputation: 81

When connecting use --authenticationDatabase=admin

Upvotes: 8

Shahid Khan Durrani
Shahid Khan Durrani

Reputation: 21

mongodump "mongodb://username:password@host:27017/?authSource=admin" --db dbname --out path\file.sql

Upvotes: 1

Turgay Can
Turgay Can

Reputation: 161

whole example command as below worked for me.

Mongodb version: 5.x.x, also for Mongodb version: 8.x.x

mongodump --authenticationDatabase=admin --uri mongodb://username:password@mongodb-host/db-name?ssl=false&authSource=admin

Upvotes: 16

Joe
Joe

Reputation: 28316

The user credential was created in the admin database.

When connecting with the mongo shell, switch with use admin before running db.auth

The mongoexport command that worked used authSource=admin in the connection string.

Add --authenticationDatabase=admin to the other command line to direct it to use the admin database for auth as well.

Upvotes: 113

Related Questions