**

MongoDB角色权限验证

**
用户权限设置
网上总结了四条
MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
切换到admin数据库,添加的账号才是管理员账号。
用户只能在用户所在数据库登录,包括管理员账号。
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。

注:在操作用户时,启动mongod服务时尽量不开启授权


内建角色:

数据库用户角色:read、readWrite;

数据库管理角色:dbAdmin、dbOwner、userAdmin;

集群管理角色: clusterAdmin、clusterManager、clusterMonitor、hostManager;

备份恢复角色: backup、restore;

所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

超级用户角色: root; 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

内部角色: __system;


角色说明:

Read: 允许用户读取指定数据库

readWrite: 允许用户读写指定数据库

dbAdmin: 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin: 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

dbOwner: 允许在当前DB中执行任意操作

readAnyDatabase: 赋予用户所有数据库的读权限,只在admin数据库中可用

readWriteAnyDatabase: 赋予用户所有数据库的读写权限,只在admin数据库中可用

userAdminAnyDatabase:赋予用户所有数据库管理User的权限,只在admin数据库中可用

dbAdminAnyDatabase: 赋予管理所有数据库的权限,只在admin数据库中可用

root: 超级账号,超级权限,只在admin数据库中可用。


集群管理角色:

clusterAdmin: 赋予管理集群的最高权限,只在admin数据库中可用

clusterManager: 赋予管理和监控集群的权限

clusterMonitor: 赋予监控集群的权限,对监控工具具有readonly的权限

hostManager: 赋予管理Server


1、添加管理员

use admin 
db.createUser({user:'root',pwd:'123456',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})

MongoDb 数据库 添加权限 mongodb角色权限_MongoDb 数据库 添加权限


2、创建指定数据库的用户,并且分配权限

use demo
db.createUser({user:'user',pwd:'123456',roles:[{role:'readWrite',db:'demo'}]})
>db.auth('user', '123456')
//返回 1 ,则说明用户密码设置ok

3、重启mongodb服务

cd /opt/modules/mongodb/ 
ps aux|grep mongod

MongoDb 数据库 添加权限 mongodb角色权限_删除用户_02


//先关掉服务(killing process with pid XXX)

bin/mongod --config /usr/local/mongodb/bin/mongodb.conf -shutdown

//开启权限认证服务,需要附加--auth
bin/mongod --config /usr/local/mongodb/bin/mongodb.conf --auth

注:文件位置不要错
4、终端登录

use admin
show dbs

MongoDb 数据库 添加权限 mongodb角色权限_linux_03


提示这个不要慌,说明权限认证已经开启了。这时候我们进行认证

db.auth('root','123456')

MongoDb 数据库 添加权限 mongodb角色权限_mongodb_04


其中有demo和demo1。下面开始测试普通账号

5、普通用户登录

退出终端重新登录

use demo
db.demo.find()

MongoDb 数据库 添加权限 mongodb角色权限_mongodb_05


再次提示这个错误,说明正确,那么开始认证

db.auth('user','123456')

MongoDb 数据库 添加权限 mongodb角色权限_linux_06


上一篇存过的数据又出现了。说明权限验证通过。我们再看nav下进行连接。

连接user控制的demo数据库

MongoDb 数据库 添加权限 mongodb角色权限_数据库_07


MongoDb 数据库 添加权限 mongodb角色权限_MongoDb 数据库 添加权限_08


我们登录了user用户只能查看到demo数据库。看不到demoo数据库。

我们再去添加一个新用户user2控制demoo库

MongoDb 数据库 添加权限 mongodb角色权限_删除用户_09


nav下进行登录

MongoDb 数据库 添加权限 mongodb角色权限_数据库_10


MongoDb 数据库 添加权限 mongodb角色权限_数据库_11


好的。两个用户的权限认证都是正确的。

6、查看已存在的用户

查看已存在的用户

db.system.users.find()

MongoDb 数据库 添加权限 mongodb角色权限_linux_12


7、删除用户

db.dropUser('demo')

MongoDb 数据库 添加权限 mongodb角色权限_mongodb_13


注:删除用户时,使用哪个数据库(use demo)。则才能删除当前数据库下面的用户

下一篇:MongoDB 增删改查(二)