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 +节点:未授权执行命令(有时有效,有时无效)