创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误。
用法
1. db.createUser(user, writeConcern)
- user:这个文档创建关于用户的身份认证和访问信息;
- writeConcern:这个文档描述保证MongoDB提供写操作的成功报告。
user文档
user文档,定义了用户的以下形式:
use products
db.createUser( { "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"
] },
{ w: "majority" , wtimeout: 5000 } )
user文档字段介绍:
- user字段,为新用户的名字;
- pwd字段,用户的密码;
- cusomData字段,为任意内容,例如可以为用户全名介绍;
- roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;
在roles字段,可以指定内置角色和用户定义的角色。
MongoDB内置角色有如下:
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
-
超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system
你可以点击这里查看每个角色所拥有的操作权限。
writeConcern文档
- w选项:允许的值分别是 1、0、大于1的值、"majority"、<tag set>;
- j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
- wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。
示例
例如:在products数据库创建用户accountAdmin01,并给该用户admin数据库上clusterAdmin和readAnyDatabase的角色,products数据库上readWrite角色。
use products
db.createUser( { "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"
] },
{ w: "majority" , wtimeout: 5000 } )
验证:
1. mongo -u accountAdmin01 -p yourpassward --authenticationDatabase products
- MongoDB 版本 v4.0.5
- 系统 Win10
超级管理员
设置 admin
use admin
db.createUser({
user: 'admin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'root', // 角色
db: 'admin' // 数据库
}]
})
设置完成,可以输入 show users 查看是否设置成功。
开启验证
找到 MongoDB 安装目录,打开 mongod.cfg文件,找到以下这句:
#security:
修改为:
security:
authorization: enabled
重启 MongoDB
打开任务管理器

找到 MongoDB 服务,右键重新启动。
这时,我们可以打开 powershell 连接数据库:
输入 mongo:

显示连接成功,但是当我们输入其他指令时,会提示没有权限:

登录数据库
// 方式一
mongo
use admin
db.auth('admin', '123456')
// 方式二
mongo admin -u admin -p 123456
这时候我们就可以正常访问和操作数据了。
添加数据库用户
我们除了可以设置数据库的超级管理员以外,还可以给每个数据库设置单独的管理员。其只有操作单独数据的一定权限。
use test // 跳转到需要添加用户的数据库
db.createUser({
user: 'fooadmin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'readWrite', // 角色
db: 'test' // 数据库名
}]
})
常用命令
show users // 查看当前库下的用户
db.dropUser('testadmin') // 删除用户
db.updateUser('admin', {pwd: '654321'}) // 修改用户密码
db.auth('admin', '654321') // 密码认证
MongoDB 数据库默认角色
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase - 超级用户角色:root