MongoDB“userAdminAnyDatabase”用户无法管理“任何数据库”中的用户。为什么?

问题描述 投票:0回答:3

这是一个

userAdmin
userAdminAnyDatabase
的问题。

system.users
中,我有以下用户(两者的密码
1234
):

> db.system.users.find()
{ "_id" : ObjectId("52a976cb7851682aa44d6d4d"), "user" : "admin_one", "pwd" : "884f516cf308a4c6a75bbc5a0a00807b", "roles" : [  "userAdmin",  "dbAdmin" ] }
{ "_id" : ObjectId("52a97c697851682aa44d6d4f"), "user" : "admin_two", "pwd" : "26e7bb644e5919461cd6ba7403dc6906", "roles" : [  "userAdminAnyDatabase",  "dbAdminAnyDatabase" ] }

与错误的用户连接:

$ mongo mono -u admin -p 1234
connecting to: mono
Thu Dec 12 10:09:00.733 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:228

没关系。

与数据库管理员连接:

$ mongo mono -u admin_one -p 1234
connecting to: mono
> db.system.users.find()
{ "_id" : ObjectId("52a976cb7851682aa44d6d4d"), "user" : "admin_one", "pwd" : "884f516cf308a4c6a75bbc5a0a00807b", "roles" : [  "userAdmin",  "dbAdmin" ] }
{ "_id" : ObjectId("52a97c697851682aa44d6d4f"), "user" : "admin_two", "pwd" : "26e7bb644e5919461cd6ba7403dc6906", "roles" : [  "userAdminAnyDatabase",  "dbAdminAnyDatabase" ] }

这也可以。

现在,与“AnyDatabase”管理员连接时出现错误:

$ mongo mono -u admin_two -p 1234
connecting to: mono
> db.system.users.find()
error: { "$err" : "not authorized for query on mono.system.users", "code" : 16550 }

为什么?

security mongodb privileges access-control
3个回答
12
投票

您似乎正在尝试在

userAdminAnyDatabase
数据库而不是
mono
数据库上分配
admin
角色。
anyDatabase
角色仅适用于通过
admin
数据库进行身份验证的用户。

请参阅

anyDatabase
角色的文档了解更多信息。


5
投票

在 mongodb 中创建管理员用户后,我遇到了类似的问题。

您可能想检查:

  1. admin用户必须在系统的admin数据库中
  2. 检查管理员用户的角色,允许您“查看”所有数据库的角色将是“clusterAdmin”,我将检查角色并添加 amdin 角色所需的角色。

这个 可能有帮助

用户角色解释:http://docs.mongodb.org/manual/reference/method/db.grantRolesToUser/#db.grantRolesToUser

userAdminAnyDatabase 和 userAdmin 不会显式授权用户拥有用户管理之外的任何权限。 您还必须为列表数据库命令添加“clusterAdmin”角色:http://docs.mongodb.org/manual/reference/user-privileges/#clusterAdmin 如果您希望用户从数据库和集合中读取/写入,您将需要添加另一个角色,即“readWrite”

此外,您可能需要检查 mongod 终端以查看后面弹出的错误。

祝你好运,


0
投票

在 mongosh 上,您可以将

clusterAdmin
角色授予
username

use admin
db.grantRolesToUser( "username", [ { role: "clusterAdmin", db: "admin" } ] )
© www.soinside.com 2019 - 2024. All rights reserved.