MongoDB - 未授权执行命令

Posted

技术标签:

【中文标题】MongoDB - 未授权执行命令【英文标题】:MongoDB - Not Authorized to Execute Command 【发布时间】:2019-05-30 06:59:48 【问题描述】:

我已经在 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\" "

我已经在许多在线资源上帮助解决了这个问题,但没有运气,有没有办法解决这个问题?好像我的用户无法访问 admin 数据库,有没有办法将此访问权限授予我的用户,以便我可以运行 show dbs 等必要的命令?

非常感谢任何帮助! :)

【问题讨论】:

您为用户分配了什么角色? (见docs.mongodb.com/manual/reference/built-in-roles) @MetalMad 谢谢回复,这里是我给用户申请的角色,角色:["dbAdmin", "read", "readWrite", "dbOwner", "userAdmin"] 【参考方案1】:

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

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

让我们使用 admin db 作为 auth db 来做到这一点

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

然后运行命令

show dbs

【讨论】:

【参考方案2】:

为了运行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;

【讨论】:

以上是关于MongoDB - 未授权执行命令的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB +节点:未授权执行命令(有时有效,有时无效)

Mongoose和Mongodb的随机错误:未授权执行命令

错误:无法添加用户:未在测试中授权执行命令 createUser:

jenkins 未授权访问-任意命令执行

node.js mongoError 管理员未授权执行命令

MongoError:未在 db 上授权执行命令?与 socket.io 连接时