• mongodb权限管理(转)


    Mongodb 预定义角色

    Mongodb 中预定义了一些角色,把这些角色赋予给适当的用户上,用户就只能进行角色范围内的操作。

    • 数据库用户角色 (所有数据库都有)
      • read 用户可以读取当前数据库的数据
      • readWrite 用户可以读写当前数据库的数据
    • 数据库管理角色(所有数据库都有)
      • dbAdmin 管理员用户但不能对用户和角色管理授权
      • dbOwner 数据库所有者可进行任何管理任务
      • userAdmin 可以管理当前数据的用户和角色
    • 集群管理角色(admin数据库可用)
      • clusterAdmin 集群所有管理权限,是 clusterManager , clusterMonitorhostManager 合集
      • clusterManager 集群管理和监控
      • clusterMonitor 集群监控,只读的
      • hostManager 监控和管理服务器
    • 备份和恢复角色(admin数据库可用)
      • backup
      • restore
    • 所有数据库角色(admin数据库可用)
      • readAnyDatabase 读取所有数据库
      • readWriteAnyDatabase 读写所有数据库
      • userAdminAnyDatabase 所有数据库的 userAdmin 权限
      • dbAdminAnyDatabase 所有数据库的 dbAdmin 权限
    • 超级角色(admin数据库可用)
      • root 超级用户
    • 内部角色
      • __system 所有操作权限

    更多预定于角色的信息请参看:https://docs.mongodb.com/manual/core/security-built-in-roles/

    创建用户定义的角色

    角色授权用户访问MongoDB资源。 MongoDB提供了许多内置的角色,管理员可以使用它们来控制对MongoDB系统的访问。 但是,如果这些角色无法描述所需的权限集,则可以在特定数据库中创建新角色。

    除了在管理数据库中创建的角色外,角色只能包含适用于其数据库的权限,并且只能继承其数据库中的其他角色。

    在管理数据库中创建的角色可以包括适用于管理数据库,其他数据库或群集资源的权限,并且可以从其他数据库中的角色以及管理数据库继承。

    要创建新角色,可使用db.createRole()方法,指定permissions数组中的权限和roles数组中的继承角色。

    MongoDB使用数据库名称和角色名称的组合来唯一定义角色。 每个角色的范围限定在创建角色的数据库中,但MongoDB将所有角色信息存储在admin数据库的admin.system.roles集合中。

    先决条件

    要在数据库中创建角色,您必须具有:

    • 对该数据库资源的createRole操作。
    • 对该数据库的grantRole操作指定新角色的权限以及指定要继承的角色。

    内置角色 userAdmin 和 userAdminAnyDatabase 在其各自的资源上提供 createRole 和 grantRole 操作。

    创建角色来管理当前操作

    以下示例创建一个名为 manageOpRole 的角色,该角色仅提供运行 db.currentOp()db.killOp()的权限。

    第一步:使用相应的权限连接到MongoDB

    使用“先决条件”部分指定的权限连接到 mongod 或 mongos 。

    以下过程使用在“启用认证”中创建的用户:myUserAdmin

    $ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    myUserAdmin具有在管理员以及其他数据库中创建角色的权限。

    第二步:创建一个新角色来管理当前操作

    manageOpRole具有对多个数据库以及群集资源的权限。 因此,您必须在管理数据库中创建该角色。

    use admin
    db.createRole(
       {
         role: "manageOpRole",
         privileges: [
           { resource: { cluster: true }, actions: [ "killop", "inprog" ] },
           { resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
         ],
         roles: []
       }
    )

    新角色授予杀死/终止任何操作的权限。

    警告: 终止运行操作非常小心。只能使用db.killOp()方法或killOp命令终止客户端发起的操作,并且不会终止内部数据库操作。

    创建角色用来运行 mongostat

    以下示例创建一个名为 mongostatRole 的角色,该角色仅提供运行 mongostat 的权限。

    第一步:使用相应的权限连接到MongoDB

    使用“先决条件”部分指定的权限连接到 mongod 或 mongos 。

    以下过程使用在启用认证中创建的用户:myUserAdmin

    $ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    myUserAdmin具有在管理员以及其他数据库中创建角色的权限。

    第二步:创建一个新角色来管理当前的操作

    mongostatRole具有作用于群集资源的权限。 因此,您必须在管理数据库中创建该角色。

    use admin
    db.createRole(
       {
         role: "mongostatRole",
         privileges: [
           { resource: { cluster: true }, actions: [ "serverStatus" ] }
         ],
         roles: []
       }
    )
    
    修改现有用户的访问权限

    先决条件

    • 必须对数据库具有grantRole操作才能在该数据库上授予角色。
    • 必须在数据库上具有revokeRole操作以撤销该数据库上的角色。
    • 要查看角色的信息,必须明确授予该角色,或必须对该角色的数据库具有viewRole操作。

    执行步骤

    第一步:使用相应的权限连接到MongoDB

    以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。

    以下过程使用在启用认证中创建的用户:myUserAdmin

    $ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    第二步:识别用户的角色和权限

    要显示要修改的用户的角色和权限,请使用db.getUser()db.getRole()方法。

    例如,要查看在示例中创建的 reportsUser 的角色,执行以下命令:

    use reporting
    db.getUser("reportsUser")

    要显示在 “accounts” 数据库上由 readWrite 角色授予用户的权限,请执行以下操作:

    use accounts
    db.getRole( "readWrite", { showPrivileges: true } )

    第三步:确定授予或撤销的权限

    如果用户需要额外的权限,则向用户授予具有所需权限集的角色或角色。 如果此类角色不存在,请使用适当的权限集创建新角色。

    撤销由现有角色提供的特权子集:撤销原始角色并授予仅包含所需权限的角色。如果角色不存在,您需要创建新角色。

    第四步:修改用户的访问权限

    4.1. 撤销角色

    使用db.revokeRolesFromUser()方法撤销角色。以下示例操作从account数据库上删除用户reportsUser 的 readWrite 角色:

    use reporting
    db.revokeRolesFromUser(
        "reportsUser",
        [
          { role: "readWrite", db: "accounts" }
        ]
    )

    4.2. 授予角色

    使用db.grantRolesToUser()方法授予角色。 例如,以下操作授予reportsUser用户account数据库上的读取角色:

    use reporting
    db.grantRolesToUser(
        "reportsUser",
        [
          { role: "read", db: "accounts" }
        ]
    )

    对于分片集群,用户的更改将在命令运行的 mongos 上即时生效。但是,对于群集中的其他mongos 实例,用户缓存可能会等待10分钟才能刷新。请参阅userCacheInvalidationIntervalSecs

    修改现有用户的密码

    先决条件

    要修改数据库上另一个用户的密码,您必须对该数据库具有changeAnyPassword操作。

    操作步骤:

    第一步:使用相应的权限连接到MongoDB

    以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。

    以下过程使用在启用认证中创建的用户:myUserAdmin

    $ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    第二步:更改密码

    将用户的用户名和新密码传递给db.changeUserPassword()方法。

    以下操作将reporting用户的密码更改为:SOh3TbYhxuLiW8ypJPxmt1oOfL

    db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")

    查看用户的角色

    先决条件

    要查看其他用户的信息,您必须对其他用户的数据库具有viewUser操作。

    用户可以查看自己的信息。

    第一步:使用相应的权限连接到MongoDB

    以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。

    以下过程使用在启用认证中创建的用户:myUserAdmin

    $ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    第二步:查看用户的角色

    使用usersInfo命令或db.getUser()方法显示用户信息。

    例如,要查看在示例中创建的 reportsUser 的角色,请发出:

    use reporting
    db.getUser("reportsUser")
    
    Shell

    在返回的文档中,roles字段显示reportsUser的所有角色:

    ...
    "roles" : [
       { "role" : "readWrite", "db" : "accounts" },
       { "role" : "read", "db" : "reporting" },
       { "role" : "read", "db" : "products" },
       { "role" : "read", "db" : "sales" }
    ]
     

    查看角色的权限

    先决条件

    要查看角色的信息,您必须明确授予该角色,或必须对该角色的数据库具有 viewRole 操作。

    第一步:使用相应的权限连接到MongoDB

    以具有先决条件部分中指定的权限的用户身份连接到 mongod 或 mongos 。

    以下过程使用在启用认证中创建的用户:myUserAdmin

    $ mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

    第二步:查看角色授予的权限

    对于给定的角色,请使用db.getRole()方法或rolesInfo命令与showPrivileges选项一起执行:

    例如,要查看在product数据库上由读取角色授予的权限,请使用以下操作,问题如下:

    use products
    db.getRole( "read", { showPrivileges: true } )

    在返回的文档中,有两个数组:privilegesinheritedPrivileges。权限列出了角色指定的权限,并排除了从其他角色继承的权限。 inheritedPrivileges列出了由此角色授予的所有权限,这两个角色都是直接指定的并被继承。 如果该角色不能从其他角色继承,则两个字段是相同的。

    ...
    "privileges" : [
      {
        "resource": { "db" : "products", "collection" : "" },
        "actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
      },
      {
        "resource" : { "db" : "products", "collection" : "system.js" },
        "actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
      }
    ],
    "inheritedPrivileges" : [
      {
        "resource": { "db" : "products", "collection" : "" },
        "actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
      },
      {
        "resource" : { "db" : "products", "collection" : "system.js" },
        "actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
      }
    ]
     转自http://www.yiibai.com/mongodb/manage-users-and-roles.html
    如果要让mongodb启动时就开启认证机制
    需要sudo vim /etc/mongod.conf

    插入

    2.6之后

    security:
    authorization: enabled

    2.6之前

    auth = true

      
  • 相关阅读:
    归并排序
    堆排序
    数组数据生成器
    冒泡排序
    快速排序
    希尔排序
    排序接口与抽象类(java)
    Pycharm下HTMLTestRunner不生成测试报告
    抓包工具使用记录
    接口学习笔记
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/7196732.html
Copyright © 2020-2023  润新知