一、授权(Authorization)及鉴权(Authentication)的原理:
(一)过程
- 授权:是由actions和resource组合成为privilege,再把privileges定义成为role,最后把roles定义成为user。
- 鉴权: 在user登录后,对resource的每一个action,都会由其roles进行鉴别。
(二)概念:
-
资源(resource)
是被保护的对象,可以是 db,collection,cluster -
动作(action)
是预定义好的对资源执行的操作,如:dropCollection。 -
权限(privilege)
是资源(resourcde)和动作集合(actions)的组合体,即表示对某项resource的actions是什么,定义形式如下:
{
actions: [ "dropCollection","otherAction" ],
resource: { db: "", collection: "system.views" }
}
- 角色(role):
是具名的,privilege的集合;也是对用户进行授权的最小单位,定义形式如下:
use admin
db.createRole(
{
role: "dropSystemViewsAnyDatabase",
privileges: [
{
actions: [ "dropCollection" ],
resource: { db: "", collection: "system.views" }
}
],
roles: []
}
)
- 以上为用户自定义的角色(user defined),同时也提供了大量的内建角色(built-in)
- 更多的参见 角色管理
- 用户(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可以被匿名登录,但只是不具备任何权限。
方式一:
mongd --auth
方式二:
修改配置文件:
#/etc/mongod.conf
security:
authorization: enabled
然后:service mongod restart
三、用户登录方式:
方式一,在登录前:
mongo -u 用户名 -p 密码 ----authenticationDatabase 用户所属于的库名
方式二,在登录后:
use [用户所属于的库名]
db.auth(用户名,密码)