我已经在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之类的必要命令?
非常感谢您的帮助! :)
答案 0 :(得分:0)
问题与您正在使用的带有--authenticationDatabase
参数的数据库有关。
您正在与没有执行listDatabase命令特权的测试数据库用户连接到mongo。
让我们使用管理数据库作为身份验证数据库
mongo --host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin
然后运行命令
show dbs
答案 1 :(得分:0)
为了运行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;