【问题标题】:How to create a database admin that will manage its database users如何创建将管理其数据库用户的数据库管理员
【发布时间】:2014-07-11 11:32:31
【问题描述】:

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

/* 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”权限,即使管理员只需要管理单个数据库。

【问题讨论】:

  • Stackoverflow 是一个面向程序员的社区。但是,您的问题是数据库管理员的问题。我提名这个问题迁移到 dba.stackexchange.com。

标签: mongodb administrator user-management


【解决方案1】:

不确定这是否得到了足够直截了当的回答,但您可以这样做:

db.createUser({user: "USERNAME", pwd: "PASSWORD", roles: [{role: "dbOwner", db: "DATABASE"}]});

其中 USERNAME、PASSWORD 和 DATABASE 将填写您的字段。

http://docs.mongodb.org/manual/reference/method/db.createUser/

【讨论】:

    【解决方案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 集合

    在 2.6 版中更改。

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

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

    用户管理命令

    • createUser 创建一个新用户。

    • updateUser 更新用户数据。

    • dropUser 删除单个用户。

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

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

    • revokeRolesFromUser 删除用户的角色。

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

    角色管理命令

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

    • updateRole 更新用户定义的角色。

    • dropRole 删除用户定义的角色。

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

    • grantPrivilegesToRole 将权限分配给用户定义的角色。

    • revokePrivilegesFromRole 从一个 用户定义的角色。

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

    • revokeRolesFromRole 从 用户定义的角色。

    • rolesInfo 返回指定角色的信息。

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

    http://docs.mongodb.org/manual/reference/command/#user-management-commands

    【讨论】:

    • 再次感谢,我想我需要学习如何彻底阅读文档
    • 不要自责,2.6版本的变化没有很好的解释。一些文档仍然对 system.users 有模棱两可的引用,但它应该始终是 admin.system.users
    • 我仍然不知道如何在数据库上创建具有读写访问权限的 dbAdmin 用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多