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
Другие вопросы по тегам