MongoDB - не авторизован для выполнения команды
Я успешно включил авторизацию на MongoDB и создал учетную запись в базе данных администратора, а затем создал учетную запись для своей базы данных с именем test. Следующая строка подключения для подключения к моей тестовой базе данных работает успешно: mongo --host 192.168.17.52 --port 27017 -u user1 -p пароль --authenticationDatabase test
Единственная проблема, с которой я столкнулся, это то, что я не могу выполнять такие команды, как: show dbs. Я получаю следующую ошибку, когда пытаюсь сделать это: "errmsg": "не авторизован администратором для выполнения команды { listDatabases: 1.0, lsid: { id: UUID(\"a1d5bc0d-bc58-485e-b232-270758a89455\") }, $db: \"admin\" }"
Я был на многих интернет-ресурсах, чтобы помочь решить эту проблему, но не повезло, есть ли способ решить эту проблему? Похоже, мой пользователь не может получить доступ к базе данных администратора, есть ли способ предоставить этот доступ моему пользователю, чтобы я мог запускать необходимые команды, такие как show dbs?
Любая помощь очень ценится!:)
1 ответ
Чтобы запустить 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" }]});
// выходим как пользователь admin и авторизуемся как testUser: обратите внимание на --authenticationDatabase "admin"
mongo -u "testUser" -p --authenticationDatabase "admin"
после входа в систему выполните команду ниже, и она должна отобразить все базы данных:
show dbs;
Приведенное ниже будет работать нормально, даже если пользователю не предоставлен доступ к admin
база данных:
use admin;
Но тогда ниже будет ошибка:
show collections;
Проблема связана с базой данных, которую вы используете с --authenticationDatabase
параметр.
Вы подключаетесь к mongo с пользователем вашей тестовой базы данных, у которого нет прав на выполнение команд listDatabase.
Давайте сделаем это используя admin db как auth db
mongo --host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin
а затем выполните команду
show dbs