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;
> 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值