MongoDB实践六(数据库安全) (
- 1docker exec -it mymongo mongo
- use admin;
- db.createUser( user:"leon",pwd:"leon",roles:["userAdminAnyDatabase"] }); //创建管理员用户
- show users;
- [root@localhost ~]# docker exec -it mymongo bash
- root@ae6522c9aa8c:/# mongo -u "leon" -p "leon" --authenticationDatabase "admin"
- db.auth("root","root")
- use admin
- 查看用户 show users;
权限:
{resource:{db:"test",collection:""},actions:["find","update"]}
{resource:{cluster:true},actions:["shutdown"]}
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:有分配角色和用户的权限,但没有查写的权限
自定义角色(创建一个只能读取 test . accounts 集合的角色)
db.createRole( { role:"readAccounts", privileges:[ {resource:{db:"test",collection:"accounts"},actions:["find"]}],roles:[]});
db.createUser({user:"accountsReader",pwd:"passwd",roles:["readAccounts"]});
授权:将角色赋予用户
db.createUser({user:"testReader",pwd:"passwd",roles:[{role:"read",db:"test"}]}) //创建一个只读 test用户
mongo -u "testReader" -p "passwd" --authenticationDatabase "test"mongo -u "testReader" -p "passwd" --authenticationDatabase "test"
创建一个读写用户
db.createUser({
... user:"writeUser",
... pwd:"passwd",
... roles:["readWriteAnyDatabase"]
... });
使用mongostat 需要对操作数据库具备clusterMonitor角色的权限
> db.createUser({
... user:"monitorUser",
... pwd:"passwd",
... roles:["clusterMonitor"]
... });
Nice to see you all!