Mongodb 如何创建管理其数据库用户的数据库管理员

Mongodb 如何创建管理其数据库用户的数据库管理员,mongodb,administrator,user-management,Mongodb,Administrator,User Management,我正在使用MongoDB 2.6.2版,希望创建一个能够管理其用户(添加和删除用户)的数据库管理员。我有两个数据库-管理员和书籍。用户admin_books应该是dbOwner,并且能够从books数据库中创建和删除用户: /* creating admin db */ > use admin; switched to db admin > db.createUser( { "user" : "admin_root", "pwd": "pass", "roles" : ["root"

我正在使用MongoDB 2.6.2版,希望创建一个能够管理其用户(添加和删除用户)的数据库管理员。我有两个数据库-管理员和书籍。用户admin_books应该是dbOwner,并且能够从books数据库中创建和删除用户:

/* creating admin db */
> use admin;
switched to db admin
> db.createUser( { "user" : "admin_root", "pwd": "pass", "roles" : ["root"] } )
Successfully added user: { "user" : "admin_root", "roles" : [ "root" ] }

/* creating books db */
> use books;
switched to db books
> db.createUser( { "user" : "admin_books", "pwd": "pass", "roles" : ["dbOwner"] } )
Successfully added user: { "user" : "admin_books", "roles" : [ "dbOwner" ] }
> db.createUser( { "user" : "logger", "pwd": "pass", "roles" : ["readWrite"] } )
Successfully added user: { "user" : "logger", "roles" : [ "readWrite" ] }
我发现从2.6版开始,所有用户实际上都存储在管理数据库中。 当我尝试在以管理员身份登录books db时查询db用户时,我遇到以下错误:

> use books
switched to db books
> db.auth("admin_books", "pass")
1
> db.system.users.find()
error: { "$err" : "not authorized for query on books.system.users", "code" : 13 }
我是否需要向管理员手册中添加任何角色和权限,以允许他管理用户? 或者正确的方法是什么


我知道也有类似的情况,但答案建议向用户添加“userAdminAnyDatabase”权限,即使管理员必须只管理单个数据库。

db.system.users集合不再用于用户管理-它在MongoDB的2.6版中被弃用:

system.users权限文档

自版本2.6以来已弃用:MongoDB 2.6为 用户凭据和权限,不再使用权限 文件

从2.6版开始,所有用户访问信息都存储在admin.system.users集合中:

system.users集合

在版本2.6中更改

管理数据库中的system.users集合存储用户 身份验证和授权信息

因此,测试用户是否有权添加其他用户的方法是不查询该数据库中的system.users集合。相反,您应该以该用户的身份登录并运行以下用户或角色管理命令之一:

用户管理命令

  • createUser创建一个新用户

  • updateUser更新用户的数据

  • dropUser删除单个用户

  • dropAllUsersFromDatabase删除与数据库关联的所有用户 数据库

  • GrantRoleTouser将角色及其权限授予用户

  • revokeRolesFromUser从用户中删除角色

  • usersInfo返回有关指定用户的信息

角色管理命令

  • createRole创建角色并指定其权限

  • updateRole更新用户定义的角色

  • dropRole删除用户定义的角色

  • dropAllRolesFromDatabase从数据库中删除所有用户定义的角色 数据库

  • GrantPrivilegestRole为用户定义的角色分配权限

  • revokePrivilegesFromRole从角色中删除指定的权限 用户定义的角色

  • grantRolesToRole指定用户定义角色的角色 继承特权

  • revokeRolesFromRole将从中删除指定的继承角色 用户定义的角色

  • RoleInfo返回指定角色的信息

  • invalidateUserCache刷新用户信息的内存缓存, 包括凭证和角色


不确定这一问题是否得到了足够的正面回答,但以下是您的解决方法:

db.createUser({user: "USERNAME", pwd: "PASSWORD", roles: [{role: "dbOwner", db: "DATABASE"}]});
其中用户名、密码和数据库将由您的字段填写


Stackoverflow是一个程序员社区。但是,您的问题是数据库管理员的问题。我把这个问题推荐给了dba.stackexchange.com。再次感谢,我认为我需要学习如何彻底阅读文档不要责怪自己,在使用2.6版时所做的更改没有得到很好的解释。有些文档对system.users的引用仍然模棱两可,而它应该始终是admin.system.users。我仍然不知道如何创建对数据库具有读写访问权限的dbAdmin用户。