greatbit / quack

Web Based Test Management System
Apache License 2.0
118 stars 34 forks source link

Не могу подключиться к mongodb с включенной аутентификацией #202

Closed krkub3 closed 2 years ago

krkub3 commented 2 years ago

В /etc/mongod.conf включена аутентификация:

security:
  authorization: enabled

Создан пользователь mongodb:

createUser({user: "testuser", pwd: "testuser", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})

В консоли подключение к mongodb работает:

$ mongo --port 27017 --authenticationDatabase "admin" -u "testuser" -p "testuser"
MongoDB shell version v4.4.13
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("de1d6eef-92b8-4609-a7dd-d585fb6fd74b") }
MongoDB server version: 4.4.13
>

Так тоже работает:

$ mongo mongodb://testuser:testuser@localhost:27017/?authSource=admin
MongoDB shell version v4.4.13
connecting to: mongodb://localhost:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("7c19f09a-f10f-4fb2-91d3-7cf373a3a552") }
MongoDB server version: 4.4.13
>

Я устанавливаю параметры в /etc/quack/quack.properties:

mongo.replicaSet=localhost:27017
mongo.dbname=testdb
mongo.username=testuser
mongo.password=testuser

В результате получаю ошибку: WARN ExceptionHandler - Exception has occurred for user root : Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='testuser', source='testdb', password=, mechanismProperties=}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='testuser', source='testdb', password=, mechanismProperties=}

Если вместо указанных выше параметров установить строку с uri:

mongo.uri=mongodb://testuser:testuser@localhost:27017/testdb?authSource=admin

То к БД вообще подключения не происходит: WARN ExceptionHandler - Exception has occurred for user root : Timed out after 30000 ms while waiting to connect.

azee commented 2 years ago

@krkub3 Вот это юзер mongo.username=testuser mongo.password=testuser

Он присутствует в базе данных testdb? Или только в admin базе? Вы можете подключиться консолью к базе testdb с этими credentials?

krkub3 commented 2 years ago

Решение Нужно подключиться к консоли mongodb и принудительно добавить пользователя в базу:

  1. use testdb

  2. db.createUser( { user: "testuser", pwd: "testuser", roles: ["readWrite"] } )