8

我已成功启用 MongoDB 授权,并在 admin 数据库上创建了一个帐户,然后为我的数据库创建了一个名为 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?

任何帮助深表感谢!:)

4

2 回答 2

4

为了运行show dbs命令并且如果用户可以访问多个数据库,首先应该在admin数据库上创建用户(这是因为listDatabases操作是集群范围的操作)。此外,用户应有权访问此操作。为此,应使用该操作创建一个新角色。以下是相同的步骤:

//登录(假设用户具有admin权限),然后运行以下命令:--authenticationDatabase "admin"adminroot

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;
于 2019-06-28T06:14:06.740 回答
0

问题与您使用--authenticationDatabase参数的数据库有关。

您正在使用无权执行 listDatabase 命令的测试数据库用户连接到 mongo。

让我们使用 admin db 作为 auth db

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

然后运行命令

show dbs
于 2019-01-03T18:12:11.713 回答