欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mongodb 权限控制以及角色使用

程序员文章站 2022-05-19 08:23:59
...

参考:http://docs.mongodb.org/manual/reference/built-in-roles

MongoDB通过基于角色的授权授予对数据和命令的访问权限,并提供内置角色,提供数据库系统中通常需要的不同访问级别。 还可以创建用户定义的角色。

关键字

MongoDB中的权限关键字。

要理解清楚MongoDB的权限必须先了解如下一些关键字.

user

即用户,用于提供客户端连接MongoDB的认证账户。

role

即角色,数据权限的集合,创建用户的时候必须要指定对应的角色,否则用户无法操作数据库。

resource

即资源,包括database或collection也可以是database和collection的组合。例如:{ db: <database>, collection: <collection> },当然你也可能看到一种特殊的资源:{“cluster” : true},它其实表示的是全局资源。

actions

即权限操作,”actions” 定义了”user”能够对 “resource document”执行的操作。例如,增删改查包括如下操作:find、insert、remove、update。

privilege

即权限,”privilege” 是一组”resource” 和 “actions” 的组合。

authenticationDatabase

认证库,即创建角色或用户时所在的库。例如,在admin下创建了MongoDB用户那么登陆的时候需要指定认证库为admin

即:mongo -host host:port --authenticationDatabase admin -u user -p password

 

MongoDB user的role

 

连接MongoDB,进入admin库,执行db.system.users.find().pretty()查看当前数据库所用用户。

如下面的xxx用户即为其中之一,我们可以看到这个user中有一个roles的列表。roles表示xxx用户拥有的就是对某一资源的权限的“集合”。

{
        "_id" : "admin.xxx",
        "user" : "xxx",
        "db" : "admin",
        "credentials" : {
                "SCRAM-SHA-1" : {
                        "iterationCount" : 10000,
                        "salt" : "kf1gjwLtDyhqZNv479nTnA==",
                        "storedKey" : "BURWrcFnUCeEk7JvV3JE+gpkEo4=",
                        "serverKey" : "Au29WWeX9ElqWltB/Mt7qnKIk4E="
                }
        },
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

 

MongoDB的内置角色

 

(1).数据库用户角色

针对每一个数据库进行控制。

read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces

readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.

示例:下面代码表示,user test在db:test下有readWrite权限。

db.createUser(
  {
        user:"test",
        pwd:"test",
       roles:
        [ 
           {
            role:"readWrite",
            db:"test"
            }
        ]
    }
);

(2).数据库管理角色

每一个数据库包含了下面的数据库管理角色。

dbOwner:该数据库的所有者,具有该数据库的全部权限。

dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。

userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。

(3).集群管理权限

admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。

clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。

clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)

clusterMonitor:仅仅监控集群和复制集。

hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。

备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。

(4).所有数据库角色

admin数据库提供了一个mongod实例中所有数据库的权限角色:

readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。和read相似,但它是全局。的。

readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。

userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。

dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。

(5). 超级管理员权限

root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。

(6). 备份恢复角色:backup、restore;

(7). 内部角色:__system

 

自定义角色

MongoDB除了内置角色外,还有可以自定义角色。

use admin
db.createRole(
       { role:"test",
       privileges: [
                  {
                resource: {
                        db:"test",
                        collection:""
                },
                actions: [ "find", "insert", "remove","update" ]
                   }
                  ],
         roles: [ ]
       }
)

上述语句在admin库里创建了一个名为test的角色,该角色拥有有对test库下的所有集合进行 find、insert、remove、update的操作的权限。角色创建完毕后 MongoDB的admin 下创建一个系统collection名叫system.roles  里面存储的即是角色相关的信息。可以使用db.system.roles.find();进行查看。

 

常用命令

创建用户

如创建用户管理员:

用户管理员是第一个要创建的用户。role为userAdminAnyDatabase,它拥有userAdmin每一个具有userAdmin每一个数据库权限。

命令为:

db.createUser(

 {

       user:"test1",

       pwd:"test1",

      roles:

       [  

          {

           role:"userAdminAnyDatabase",

           db:"admin"

           }

       ]

   }

);

 

删除用户

db.dropUser('test1')

查看所有用户

use admin

db.system.users.find().pretty()

查看role

show roles;

如果知道具体role的权限:

db.getRole("read",{showPrivileges: true});

查看自定义role:

db.system.roles.find();

相关标签: role user 鉴权