MongoDB 安全控制角色说明

来源:互联网 发布:学设计软件机构 编辑:程序博客网 时间:2024/05/15 10:26
  1. 官方文档地址
    MongoDB內建角色官方文档说明
  2. 注意点
    1. 本文基于MongoDB 3.4版本
    2. 写这篇文档的目的
        这篇文章仅合适像自己一样的MongoDB新手,自己在查阅此部分资料时发现网上大部分资料要不是版本过时要不就是有错误,因此决定查阅翻译官方文档部分内容,尽量保证内容正确性。
        MongoDB 数据库內建角色的具体介绍及允许的操作详见官方文档
        此处仅依据官方文档进行举例说明。
  3. 举例场景
    3.1 单一数据库管理员

      一测试数据库test为例,建议新手在开启mongoDB安全控制访问后先使用root@admin账户在测试数据库下给自己一个dbOwner权限的账户,即dbOwner@test。
      原因是对于单个数据库,一般有三种常见权限:readWrite,dbAdmin,userAdmin,一些文章会告诉你使用dbAdmin权限,但事实上dbAdmin角色在非系统数据库中默认是没有find(),insert()这些数据操作的。许多新手(包括我自己),都在使用了dbAdmin角色后发现依然无法查看数据库中的数据,其实这是MongoDB对不同角色设置了默认允许的操作的原因。
      
      下图是官方文档中对dbAdmin允许操作的说明,提及了其没有全部的读方法:
      这里写图片描述
      
      dbOwner是readWrite,dbAdmin,UserAdmin三者的合体,简单说readWrite对数据库有读写操作,dbAdmin有监控数据状态、索引管理等数据库运行层级的操作,UserAdmin则有数据库账户管理的操作,只有dbOwner才有对一个数据库全部的操作。
      
    3.2 多数据库管理员

      使用一个账户管理多数据库有两种方法:
        1.在每一个数据库中建立一样名字一样密码的管理员账号,每次切换数据库时都使用db.auth()函数进行授权
        2.由root角色在admin中建立一个角色,再集中授权给各个数据库,这样只要在admin数据库进行一次登录后,即可自由连接各数据库。
      下面介绍方法二:
        1.使用root角色登录admin数据库 db.auth(“root”,”root_psd”)
        2.在admin下创建多数据库管理角色test_root,管理test01,test02,test03三个数据库 db.creatUser({user:”test_root”,pwd:”test_root_pwd”,roles:[{role:’dbOwner’,db:”test01”},{role:’dbOwner’,db:”test02”},{role:’dbOwner’,db:”test03”}]})
        3. 退出root登录,以test_root角色登录
          use admin
          db.auth(“test_root”,”test_root_pwd”)
        4.在admin授权后即可自由操作test01,test02,test03数据库