安装好MongoDB时,它为我们默认开了一个最高管理权限方便我们管理数据库,我们可以用mongo链接数据库,就是这个原理。但在实际开发中并一般不能使用这个用户,因为大家都知道和最高权限的原因,安全性和可靠性都不适合,所以要对MongoDB的用户进行管理。这节课我们就学习一下MongoDB的用户管理。
创建用户
> db.createUser({
user:"zjj",
pwd:"123456",
customData:{
name:'zjj',
email:'111111@126.com',
age:18,
},
roles:[
{
role:"readWrite",
db:"company"
},
'read'
// 对其他数据库有只读权限,对company是读写权限
]
})
内置角色:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system
Read
:允许用户读取指定数据库
readWrite
:允许用户读写指定数据库
dbAdmin
:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin
:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin
:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase
:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase
:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase
:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase
:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root
:只在admin数据库中可用。超级账号,超级权限
查找用户信息
> db.system.users.find()
// 删除用户
db.system.users.remove({user:"jspang"})
建权
//
> db.auth("jspang","123456")
1
>如果正确返回1,如果错误返回0。(Error:Authentication failed。)
登陆
//
mongo -u jspang -p 123456 127.0.0.1:27017/admin
看了上面的知识点,我们来亲自动手操作一下吧
test1
// 我们开始是使用下面的语句来进行开机的
$ mongod --dbpath d:\mongodbdata
// 另一个cmd中连接数据库
$ mongo
>
// 假设我们已经有了company数据库了
> use admin
> db.createUser({
user:"zjj",
pwd:"123456",
customData:{
name:'zjj',
email:'111111@126.com',
age:18,
},
roles:[
{
role:"readWrite",
db:"company"
},
'read'
]
})
> db.system.users.find()
// 用户创建完毕之后,关闭一下数据库
> db.shupdownServer();
// 这次我们以权限的方式开机
> mongod --dbpath d:\mongodbdata --auth
> mongo
> use admin
> db.auth("zjj":"123456");
> 1
// 然后ctrl +c 重新连接一次
> mongo -u zjj -p 123456 127.0.0.1:27017/company
>
// 没毛病