mongodb 基于角色的访问控制(RBAC)

一、授权(Authorization)及鉴权(Authentication)的原理:

(一)过程

  1. 授权:是由actions和resource组合成为privilege,再把privileges定义成为role,最后把roles定义成为user。
  2. 鉴权: 在user登录后,对resource的每一个action,都会由其roles进行鉴别。

(二)概念:

  1. 资源(resource)
    是被保护的对象,可以是 db,collection,cluster
  2. 动作(action)
    是预定义好的对资源执行的操作,如:dropCollection。
  3. 权限(privilege)
    是资源(resourcde)和动作集合(actions)的组合体,即表示对某项resource的actions是什么,定义形式如下:
      {
         actions: [ "dropCollection","otherAction" ],
         resource: { db: "", collection: "system.views" }
       }
  1. 角色(role):
    是具名的,privilege的集合;也是对用户进行授权的最小单位,定义形式如下:
use admin
db.createRole(
   {
     role: "dropSystemViewsAnyDatabase",
     privileges: [
       {
         actions: [ "dropCollection" ],
         resource: { db: "", collection: "system.views" }
       }
     ],
     roles: []
   }
)
  1. 用户(user)
    它代表数据库使用者的身份;是具名的,角色的集合(roles);定义形式如下:
## 创建test1.john的user
use test1
db.createUser(
    {
      user: "john",
      pwd: "123",      
      customData: { email:"",other:"" },//任意document
      roles: [
        { role: "<role>", db: "<database>" } | "<role>",
        ...
      ]
      //,后面省略了一些其它配置,一般情况以上就足够使用了。
    }
)
  • 更多的参见 用户管理

  • 要引起注意的是:

    (1)user自身也是资源(resource)。
    (2)user是位于db下的二级资源,与collection,index是同级资源。

二、启用RBAC

原理:
只有启用了Access Control,mongodb才可以根据用户进行鉴权,此时mongo可以被匿名登录,但只是不具备任何权限。

  1. 方式一:
    mongd --auth

  2. 方式二:
    修改配置文件:

#/etc/mongod.conf
security:
  authorization: enabled

然后:service mongod restart

三、用户登录方式:

方式一,在登录前:

mongo -u 用户名 -p 密码 ----authenticationDatabase 用户所属于的库名

方式二,在登录后:

use [用户所属于的库名]
db.auth(用户名,密码)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容