Skip to content

Latest commit

 

History

History
141 lines (110 loc) · 4.45 KB

安全篇.md

File metadata and controls

141 lines (110 loc) · 4.45 KB

安全篇

摘要

  1. 要以用户身份进行身份验证,您必须提供用户名,密码以及 与该用户关联的身份验证数据库
  2. 添加用户时,可以在特定数据库中创建用户。该数据库是用户的身份验证数据库。
  3. 用户可以拥有跨不同数据库的权限; 也就是说,用户的权限不限于其身份验证数据库。通过分配给其他数据库中的用户角色,在一个数据库中创建的用户可以拥有对其他数据库执行操作的权限。

启用访问控制

  1. 创建 root 用户

    use admin
    db.createUser({user:"root",pwd:"root",roles:["root"]})# 创建root用户
    db.createUser({user:"anyroot",pwd:"anyroot",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})
  2. 重启数据库

    db.adminCommand({shutdown:1})
  3. 在启动的配置文件中加入 security 选项启用访问控制。

    systemLog:
        destination: file
        logAppend: true
        path: /Users/machunyu/Work/mongodb/logs/run.log
    processManagement:
        fork: true
        pidFilePath: /Users/machunyu/Work/mongodb/logs/mongod.pid
    net:
        port: 27017
        bindIp: 127.0.0.1
        wireObjectCheck: true
    storage:
        dbPath: /Users/machunyu/Work/mongodb/data
        engine: wiredTiger
    security:
        authorization: enabled
  4. 连接数据

    mongo --port 27017 -u root -p root --authenticationDatabase "admin"
  5. 创建一个带有描述的用户

    db.createUser({
        user:"mcy",
        pwd:"mcy",
        customData:{
            name:"machunyu",
            email:"[email protected]",
            age:18
        },
        roles:[
            {role:"clusterManager",db:"admin"}
        ]
    })

用户权限管理

  1. 创建用户

    • 创建 root 用户。

      use admin
      db.createUser({user:"root",pwd:"root",roles:["root"]})
      
    • 创建操作多个数据库的读写权限。

      use admin
      db.updateUser("root",{pwd:"root",roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
      
  2. 修改用户权限

    use admin
    db.updateUser("root",{pwd:"root",roles:[{role:"clusterAdmin",db:"admin"}]})
    
  3. 追加用户权限

    #追加集群管理权限
    use admin
    db.grantRolesToUser("anyroot",[{role:"clusterAdmin",db:"admin"}])
    
  4. 删除用户

    db.dropUser("anyroot")//删除单个用户
    db.dropAllUser();	  //删除全部用户
    db.runCommand({"dropAllUsersFromDatabase":1})   //删除全部用户
    

连接数据库

mongo --port 27017 -u root --authenticationDatabase "admin" -p "abc123"

基于角色的访问控制

内置角色(Built-In Roles)

  1. 数据库用户角色(Database User Roles)
    • read: 授予User只读数据的权限
    • readWrite: 授予User读写数据的权限
  2. 数据库管理角色(Database Administration Roles)
    • dbAdmin: 在当前dB中执行管理操作
    • dbOwner: 数据库所有者可以对数据库执行任何管理操作。这个角色享有readWritedbAdminuserAdmin角色。
    • userAdmin: 提供在当前数据库上创建和修改角色和用户的功能。由于该userAdmin角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接地提供 对数据库的超级用户访问权限,或者。
  3. 备份和还原角色(Backup and Restoration Roles)
    • backup
    • restore
  4. 跨库角色(All-Database Roles):
    • readAnyDatabase: 授予在所有数据库上读取数据的权限
    • readWriteAnyDatabase: 授予在所有数据库上读写数据的权限
    • userAdminAnyDatabase: 授予在所有数据库上管理User的权限
    • dbAdminAnyDatabase: 授予管理所有数据库的权限
  5. 集群管理角色(Cluster Administration Roles):
    • clusterAdmin: 授予管理集群的最高权限
    • clusterManager: 授予管理和监控集群的权限
    • clusterMonitor: 授予监控集群的权限,对监控工具具有readonly的权限
    • hostManager: 管理Server