MongoDB角色、权限介绍

MongoDB角色

内置角色:

1.数据库用户角色:read、readWrite;
2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore;
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6.超级用户角色:root
//这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
其中MongoDB默认是没有开启用户认证的,也就是说游客也拥有超级管理员的权限。userAdminAnyDatabase:有分配角色和用户的权限,但没有查写的权限,不能用作备份。

1、无需认证的情况下启动mongodb
$ /opt/mongodb/bin/mongo
> use admin
> db.createUser({user:"admin",pwd:"admin#124",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
> db.createUser({user:"root",pwd:"password",roles:["root"]})
> db.auth("admin","admin#124") 返回1表示成功

2、开启权限认证后重启mongodb
$ /opt/mongodb/bin/mongo -u admin -p admin#124  admin
> show dbs
admin    0.000GB
local    0.000GB

自定义角色

创建角色

use ucpplus //进入 ucpplus数据库

命令行格式:
db.createRole({role:"adminRole",privileges:[{resource:{db:"ucpplus",collection:""},actions:["insert","remove"]}],roles:[]})

json格式:
db.createRole(
    { 
    role:"adminRole",//角色名称
    privileges: [ // 权限集
        {
           resource: //资源 
            {
                db:"ucpplus", //创建的adminRole角色具有对ucpplus库的操作权限,具体权限建actions
                collection:"" //ucpplus库下对应的集合名.如果为""表示所有集合
            },
                actions: [  "insert", "remove" ] //角色可进行的操作,注意这里是一个数组
        }
        ],
        roles: [] // 是否继承其他的角色,如果指定了其他角色那么新创建的角色自动继承对应其他角色的所有权限,该参数必须显示指定
    }
)


上述语句在ucpplus 库里创建了一个名为adminRole的角色,该角色具有对数据库ucpplus下的所有集合进行 insert、remove 的操作的权限。

角色创建完毕后 MongoDB 会在系统库 admin 下创建一个系统 collection 名叫 system.roles 里面存储的即是角色相关的信息。

可以使用下面的语句对创建的角色进行查看。

> use admin;
> db.system.roles.find();
{ "_id" : "ucpplus.adminRole", "role" : "adminRole", "db" : "ucpplus", "privileges" : [ { "resource" : { "db" : "ucpplus", "collection" : "" }, "actions" : [ "insert", "remove" ] } ], "roles" : [ ] }

角色增加授权

use ucpplus //进入 ucpplus数据库

命令行格式:
db.grantPrivilegesToRole("adminRole",[{resource:{db:"ucpplus",collection:""},actions:["update","find"]}])

json格式:
db.grantPrivilegesToRole(
    "adminRole",
    [
        {
            resource: //权限可操作的资源
            {
              db:"ucpplus",  // 授予adminRole角色具有操作ucpplus库的权限
              collection:"" //  如果为"" 表示所有集合
            },                                                 
            actions:  // 权限允许的操作
            ["find","update"] //权限可进行的操作
        } 
    ]
)

执行完操作后 adminRole 角色便可以对库 ucpplus下的所有集合多了"find","update"权限。

>use admin;
> db.system.roles.find();
{ "_id" : "ucpplus.adminRole", "role" : "adminRole", "db" : "ucpplus", "privileges" : [ { "resource" : { "db" : "ucpplus", "collection" : "" }, "actions" : [ "find", "insert", "remove", "update" ] } ], "roles" : [ ] }

角色权限回收

use ucpplus //进入 ucpplus数据库

命令行格式:
db.revokePrivilegesFromRole("adminRole",[{resource:{db:"ucpplus",collection:""},actions:["find"]}])


json格式
db.revokePrivilegesFromRole(
  "adminRole",
  [
    {
        resource: //权限可操作的资源
        {
            db:"ucpplus",  // 回收角色对库 xttblog 的 actions 操作权限
            collection:"" //  xttblog 库下所有的集合 如果为"" 表示所有集合
        },                                                 
        actions:  // 权限允许的操作
        [ "find"] //需要回收的权限
     } 
  ]
)

执行完操作后adminRole 角色对库ucpplus 下的所有集合无法进行 “find” 操作。

>use admin;
> db.system.roles.find();
{ "_id" : "ucpplus.adminRole", "role" : "adminRole", "db" : "ucpplus", "privileges" : [ { "resource" : { "db" : "ucpplus", "collection" : "" }, "actions" : [ "insert", "remove", "update" ] } ], "roles" : [ ] }

更新角色

 > use ucpplus //进入 ucpplus数据库
 > db.updateRole("adminRole",{roles:[{role:"readWrite",db:"ucpplus"}]},{w:"majority"})
 > use admin 
 > { "_id" : "ucpplus.adminRole", "role" : "adminRole", "db" : "ucpplus", "privileges" : [ { "resource" : { "db" : "ucpplus", "collection" : "" }, "actions" : [ "find", "insert", "remove", "update" ] } ], "roles" : [ { "role" : "readWrite", "db" : "ucpplus" } ] }

删除角色

> use ucpplus
switched to db ucpplus
> db.dropRole("adminRole")  
true
> use admin
switched to db admin
> db.system.roles.find();  //删除角色比较简单直接指定要删除角色的名称即可
> 

删除用户

> use ucpplus;
switched to db ucpplus
#创建用户
> db.createUser({user:"ucp",pwd:"ucp#124",roles:[{role:"adminRole",db:"ucpplus"}]}); 
Successfully added user: {
        "user" : "ucp",
        "roles" : [
                {
                        "role" : "adminRole",
                        "db" : "ucpplus"
                }
        ]
}
#查看用户
> show users;
{
        "_id" : "ucpplus.ucp",
        "user" : "ucp",
        "db" : "ucpplus",
        "roles" : [
                {
                        "role" : "adminRole",
                        "db" : "ucpplus"
                }
        ]
}
#删除用户
> db.dropUser("ucp");
true
> show users;
> 

你可能感兴趣的:(数据库,mongodb,数据库,nosql)