Чтобы запустить команду 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;