• mongodb之用户/认证/角色/权限管理


    前言

    用户权限管理很重要,只给需要的权限,防止应用系统漏洞导致脱库


    认证和授权

    Authentication

    认证识别,解决我是谁

    Authorization

    操作授权,我能做什么


    认证机制

    MONGODB-CR

    官方自定义实现认证机制,通过用户名和密码,通过challenge-response方式,来识别和验证授权。SCRAM-SHA-1认证机制有更好的安全性,新版本默认使用SCRAM-SHA-1。不建议使用MONGODB-CR模式。

    SCRAM-SHA-1

    3.0版本新加功能,Mongodb默认的认证模式,通过用户名和密码认证,IETF标准:RFC 5802


    x.509证书

    2.6版本新加功能,公钥证书结构标准,由国际电信联盟(ITU)定义。认证授权时需要通过TLS/SSL加密连接,也就是说mongodb服务需要支持加密协议访问。配置非常麻烦,建议不使用>_<

    判断流程,根据公开资料猜测

    LDAP

    仅企业版支持

    Kerberos

    仅企业版支持


    用户管理

    添加用户

    通过mongo shell终端操作,用户保存在admin数据库system.user集合中

    添加普通用户

    切换到需要添加用户的db
    use xxxx

    执行添加

    db.createUser(
    	{
    		user:"username",
    		pwd:"password",
    		roles:[
    			{role:"read", db:"xxxx"},
    			{role:"readWrite", db:"test"}
    		]
    	}
    )
    

      

    添加超级用户

    切换到admin数据库
    use admin

    执行添加

    db.createUser(
    	{
    		user:"username",
    		pwd:"password",
    		roles:[
    			{role:"root", db:"admin"}
    		]
    	}
    )
    

      

    删除用户

    切换到用户授权的db
    use xx

    执行删除操作
    db.dropUser("username")

    更新用户

    切换到用户授权的db
    use xx

    执行更新
    字段会覆盖原来的内容

    db.updateUser("username",{
    	pwd:"new password",
    	customData:{
    		"title":"PHP developer"
    	}
    })
    

      

    更新用户密码

    use xx
    db.changeUserPassword("username","newpassword")

    查看用户信息

    use admin
    db.getUser("username")

    删除用户角色

    use xx

    db.revokeRolesFromUser(
        "usename",
        [
          { role: "readWrite", db: "accounts" }
        ]
    )
    

      

    添加用户角色

    use xx

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

      


    角色管理

    自定义角色

    自定义角色保存在admin数据库system.roles集合中

    切换到admin数据库
    use admin

    执行添加

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

      

    查看角色信息

    use admin
    db.getRole("rolename",{showPrivileges:true})

    删除角色

    use admin
    db.dropRole("rolename")

    系统内置用户角色

    大部分内置的角色对所有数据库共用,少部分仅对admin生效

    数据库用户类

    read
    非系统集合有查询权限

    readWrite
    非系统集合有查询和修改权限

    数据库管理类

    dbAdmin
    数据库管理相关,比如索引管理,schema管理,统计收集等,不包括用户和角色管理

    dbOwner
    提供数据库管理,读写权限,用户和角色管理相关功能

    userAdmin
    提供数据库用户和角色管理相关功能

    集群管理类

    clusterAdmin
    提供最大集群管理权限

    clusterManager
    提供集群管理和监控权限

    clusterMonitor
    提供对监控工具只读权限

    hostManager
    提供监控和管理severs权限

    备份和恢复类

    backup
    提供数据库备份权限
    restore
    提供数据恢复权限

    All-Database类

    readAnyDatabase
    提供读取所有数据库的权限除了local和config数据库之外

    readWriteAnyDatabase
    和readAnyDatabase一样,除了增加了写权限

    userAdminAnyDatabase
    管理用户所有数据库权限,单个数据库权限和userAdmin角色一样

    dbAdminAnyDatabase
    提供所有用户管理权限,除了local,config


    超级用户类

    root
    数据库所有权限

    内部角色

    __system
    提供数据库所有对象任何操作的权限,不能分配给用户,非常危险


    参考资料

    【1】认证识别
    https://docs.mongodb.com/manual/core/authentication/

    【2】openssl 证书操作命令
    http://blog.csdn.net/madding/article/details/26717963

    【3】维基百科X.509介绍
    https://en.wikipedia.org/wiki/X.509

    【4】mongodb - security-x.509
    https://docs.mongodb.com/manual/core/security-x.509/

    【5】Use x.509 Certificates to Authenticate Clients
    https://docs.mongodb.com/manual/tutorial/configure-x509-client-authentication/

    【6】Enterprise Authentication Mechanisms - ldap and Kerberos
    https://docs.mongodb.com/manual/core/authentication-mechanisms-enterprise/

    【7】mongodb添加用户
    https://docs.mongodb.com/manual/tutorial/create-users/

    【8】更改mongodb用户密码和自定义数据
    https://docs.mongodb.com/manual/tutorial/change-own-password-and-custom-data/

    【9】mongodb数组
    http://www.cnblogs.com/ljhdo/p/5428037.html

    【10】管理mongodb用户和角色
    https://docs.mongodb.com/manual/tutorial/manage-users-and-roles/

    【11】security-users
    https://docs.mongodb.com/manual/core/security-users/

    【12】Internal Authentication
    https://docs.mongodb.com/manual/core/security-internal-authentication/

    【13】Built-In Roles
    https://docs.mongodb.com/manual/core/security-built-in-roles/

    【14】reference:built-in-roles and built-in-actions
    https://docs.mongodb.com/manual/reference/built-in-roles/

    【15】SCRAM-SHA1认证方式介绍
    https://docs.mongodb.com/manual/core/security-scram-sha-1/#authentication-scram-sha-1

    作者:WadeYu
    出处:http://www.cnblogs.com/wadeyu/
    本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 师座操作系统
    Java实现 蓝桥杯VIP 算法提高 师座操作系统
    Java实现 蓝桥杯VIP 算法提高 师座操作系统
    Qt_5_3_MSVC2012-编译QFtp-qt5编译QFtp
    存储入门 – RAID技术(大图解释)
    为什么要关闭360云盘:新来的美工嫌我们logo太丑,所以就决定关闭了。这个理由怎么样
    360云盘服务端前来回答
    SMB2 Protocol – 简介(应用层协议主要用于在计算机间共享文件、打印机、串口等)
    MVC 5
    集合
  • 原文地址:https://www.cnblogs.com/wadeyu/p/7928625.html
Copyright © 2020-2023  润新知