0%

MongoDB用户管理

RBAC(Role-Based Access Control),即基于角色的访问控制,基本原理是权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限,它极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理很方便。

一、概念

      MongoDB使用基于角色的访问控制(RBAC)来管理对MongoDB系统的访问,提供内置角色,也支持用户自定义的角色。通过授予用户一个或多个角色,这些角色确定用户对数据库资源和操作的访问权限,除角色分配外,用户无权访问系统。默认情况下不启用访问控制,可以使用–auth或security.authorization设置启用授权,启用内部身份验证也会启用客户端授权。

  1. 角色相关命令
    • 创建角色db.createRole({arguments})
    • 查看角色show roles
      • __queryableBackup
      • __system
      • backup
      • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
      • clusterManager
      • clusterMonitor
      • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建删除、查看统计、访问system.profile等。
      • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
      • dbOwner
      • enableSharding
      • hostManager
      • read:允许用户读取指定数据库
      • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限。
      • readWrite:允许用户读写指定数据库。
      • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限。
      • restore
      • root:只在admin数据库中可用,超级账号权限。
      • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户等。
      • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
    • 查看角色权限db.getRole("read", {showPrivileges: true})

超级用户的role有两种,userAdmin或者userAdminAnyDatabase

  1. 用户相关命令
    • 创建用户db.createUser({arguments})
      • 验证用户db.auth("username","password");
    • 查看用户show users
    • 删除用户db.dropUser("username")
    • 查看用户所属角色db.getUser("username")

二、实战

  1. 创建用户

    • show dbs
    • use admin
    • 创建
    1
    2
    3
    4
    5
    6
    7
    8
    db.createUser({
    user:"user123",
    pwd:"123456",
    roles:[
    {role:"userAdminAnyDatabase", db:"admin"},
    {role:"read", db:"test"}
    ]
    })
    • show usersdb.system.users.find().pretty()
    • 修改密码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    db.changeUserPassword("user123","abc")



    db.runCommand({
    updateUser:"user123",
    pwd:"abc",
    customData:{title:"your title"}
    })
  2. 验证

    • db.auth("user123","123456")
    • show usersdb.system.users.find().pretty()
  3. 查看用户权限

1
2
3
4
db.runCommand({
usersInfo:"user123",
showPrivileges:true
})
  1. 删除用户db.system.users.remove({user:"testUser"})

三、参考

  1. 参考一
  2. 参考二