繁体   English   中英

MongoDB-未经授权执行命令

[英]MongoDB - Not Authorized to Execute Command

我已经在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之类的必要命令?

任何帮助深表感谢! :)

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

您正在与没有执行listDatabase命令特权的测试数据库用户连接到mongo。

让我们使用admin db作为auth db来执行此操作

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

然后运行命令

show dbs

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

//使用--authenticationDatabase "admin"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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM