MongoDB"userAdminAnyDatabase"用户无法在"任何数据库"中管理用户.为什么?

Gab*_*vay 5 security privileges access-control mongodb

这是一个userAdminuserAdminAnyDatabase问题.

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" ] }
Run Code Online (Sandbox Code Playgroud)

与错误的用户连接:

$ 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
Run Code Online (Sandbox Code Playgroud)

这没关系.

与数据库管理员连接:

$ 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" ] }
Run Code Online (Sandbox Code Playgroud)

哪个也行.

现在,连接"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 }
Run Code Online (Sandbox Code Playgroud)

为什么?

小智 9

您似乎正在尝试userAdminAnyDatabasemono数据库上分配角色,而不是{{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不会明确授权用户使用用户管理之外的任何权限.您还必须为list databases命令添加"clusterAdmin"角色:http://docs.mongodb.org/manual/reference/user-privileges/#clusterAdmin 如果您希望用户从数据库读取/写入集合,你需要添加另一个角色,"readWrite"

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

祝好运,