mongodb存储全部的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用受权认证,只要能链接到该服务器,就可链接到mongod。若要启用安全认证,须要更改配置文件参数auth
1:建立一个root用户,角色为userAdminAnyDatabase,所以root用户对数据库具备管理权限,可是不具有操做权限
db.createUser({user:"root",pwd:"123456", roles: [{ role: "userAdminAnyDatabase", db: "admin" }]});
2:createUser()方法说明
user:定义用户名
pwd:设置密码
roles:指定用户的角色,能够用一个空数组给新用户设定空角色; 在roles字段,能够指定内置角色和用户定义的角色。
db:指定用户对哪一个数据库具备管理员权限
3:角色种类说明
Built-
In Roles(内置角色):
①. 数据库用户角色:
read、readWrite;
②. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
③. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
④. 备份恢复角色:backup、
restore;
⑤. 全部数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
⑥. 超级用户角色:root
⑦. 内部角色:__system
4:角色对应的意义说明
Read:容许用户读取指定数据库
readWrite:容许用户读写指定数据库
dbAdmin:容许用户在指定数据库中执行管理函数,如索引建立、删除,查看统计或访问system.profile
userAdmin:容许用户向system.users集合写入,能够找指定数据库里建立、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户全部分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户全部数据库的dbAdmin权限。
root:只在admin数据库中可用。超级帐号,超级权限
5:查看受权表
db.system.users.find();
6:此时退出MongoDB,且编辑配置文件/etc/mongod.
conf, 添加
auth=true(针对于2.6版本)
security:(针对于3.4版本)
authorization: enabled
7:能够在链接数据库的时候认证,也能够在登入时候认证,这里使用登入以后认证的方式
show dbs; (会报错,由于没有管理受权)
db.auth("root", "123456") 受权以后再查看数据库就没有问题了
8:此时登入使用的是root用户,角色是管理角色,可是不具有对数据库的操做权限
use test;
show collections; (会报错,由于没有操做权限)
9:再次建立一个用户:
test,让其对test具备读写操做, 且切换用户为test
db.createUser({user:"test",pwd:"test", roles: [{ role: "readWrite", db: "test" }]});
db.auth("test", "test")
10:再次查看
test库的表,发现能够查看了
show collections;
11:其实,若是须要建立一个用户具备管理权限且同时具备操做权限,那么这个用户的角色必须是root
db.createUser({user:"yhy",pwd:"123456", roles: [{ role: "root", db: "admn" }]});