MongoDB - не авторизован для выполнения команды - PullRequest
0 голосов
/ 03 января 2019

Я успешно включил авторизацию на MongoDB и создал учетную запись в базе данных администратора, а затем создал учетную запись для своей базы данных, которая называется test. Следующая строка подключения для подключения к моей тестовой базе данных работает успешно: mongo --host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase test

Единственная проблема, с которой я столкнулся сейчас, - я не могу выполнять такие команды, как: show dbs. При попытке сделать это я получаю следующую ошибку:

"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, lsid: { id: UUID(\"a1d5bc0d-bc58-485e-b232-270758a89455\") }, $db: \"admin\" }"

Я был на многих интернет-ресурсах, чтобы помочь решить эту проблему, но не повезло, есть ли способ решить эту проблему? Похоже, мой пользователь не может получить доступ к базе данных администратора, есть ли способ предоставить этот доступ моему пользователю, чтобы я мог запускать необходимые команды, такие как show dbs?

Любая помощь очень ценится! :)

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Чтобы запустить команду show dbs и если у пользователя есть доступ к нескольким базам данных, сначала необходимо создать пользователя в базе данных admin (это потому, что действие listDatabases - это операция всего кластера).Также пользователю должен быть предоставлен доступ к этой операции.Для этого с действием нужно создать новую роль.Ниже приведены шаги для того же самого:

// войдите как admin с --authenticationDatabase "admin" (предполагается, что admin пользователь с привилегиями root), а затем выполните следующее:

use admin;

db.runCommand({ createRole: "listDatabases", privileges: [{ resource: { cluster : true }, actions: ["listDatabases"]} ], roles: [] });

db.createUser({user:"testUser", pwd:"passwd", roles:[{role:"read", db:"db1"},{role:"read", db:"db2"},{ role: "listDatabases", db: "admin" }]});

// выйти как администратор и войти как testUser: обратите внимание на --authenticationDatabase "admin"

mongo -u "testUser" -p --authenticationDatabase "admin"

после входа в систему, запустите команду ниже, и она должна перечислить все базы данных:

show dbs;

Нижеследующее будет работать нормально, даже если пользователю не предоставлен доступ к базе данных admin:

use admin;

Но тогда приведенное ниже выдаст ошибку:

show collections;
0 голосов
/ 03 января 2019

Проблема связана с базой данных, которую вы используете, с параметром --authenticationDatabase.

Вы подключаетесь к mongo с пользователем вашей тестовой базы данных, у которого нет прав на выполнение команд listDatabase.

Давайте сделаем это используя admin db в качестве auth db

mongo --host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin

и затем выполните команду

show dbs
...