我使用MongoDB ver2.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版开始存储在admin db中的。 当我尝试在以admin_books登录到书籍数据库时查询数据库用户时,我收到以下错误:
> 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 }
我需要添加到admin_books以允许他管理用户的任何角色和权限吗? 或者这样做的正确方法是什么?
我知道有一个类似的question,但答案建议添加一个“userAdminAnyDatabase”'即使管理员必须只管理单个数据库,也要享有用户权限。
答案 0 :(得分:8)
不确定这是否得到了足够的回答,但这是你如何做到的:
db.createUser({user: "USERNAME", pwd: "PASSWORD", roles: [{role: "dbOwner", db: "DATABASE"}]});
在USERNAME,PASSWORD和DATABASE中填写您的字段。
http://docs.mongodb.org/manual/reference/method/db.createUser/
答案 1 :(得分:2)
db.system.users集合不再用于用户管理 - 它在MongoDB 2.6版中已弃用:
system.users权限文档
从2.6版开始不推荐使用:MongoDB 2.6引入了一个新的模型 用户凭据和权限,不再使用权限 文档。
http://docs.mongodb.org/manual/reference/privilege-documents/
从版本2.6开始,所有用户访问信息都存储在admin.system.users集合中:
system.users Collection
在版本2.6中更改。
admin数据库中的system.users集合存储用户 身份验证和授权信息。
因此,测试用户是否有权添加其他用户的方法不是查询该数据库中的system.users集合。相反,您应该以该用户身份登录并运行其中一个用户或角色管理命令:
用户管理命令
createUser创建新用户。
updateUser更新用户的数据。
dropUser删除单个用户。
dropAllUsersFromDatabase删除与a关联的所有用户 数据库中。
grantRolesToUser向用户授予角色及其权限。
revokeRolesFromUser从用户中删除角色。
usersInfo返回有关指定用户的信息。
角色管理命令
createRole创建角色并指定其权限。
updateRole更新用户定义的角色。
dropRole删除用户定义的角色。
dropAllRolesFromDatabase从a删除所有用户定义的角色 数据库中。
grantPrivilegesToRole为用户定义的角色分配权限。
revokePrivilegesFromRole从a中删除指定的权限 用户定义的角色。
grantRolesToRole指定用户定义角色的角色 继承特权。
revokeRolesFromRole从a中删除指定的继承角色 用户定义的角色。
rolesInfo返回指定角色的信息。
invalidateUserCache刷新用户信息的内存缓存, 包括证书和角色。
http://docs.mongodb.org/manual/reference/command/#user-management-commands