MongoDB 用户权限管理手册
https://docs.mongodb.com/manual/reference/method/js-user-management/
链接MongoBD服务端
因为我配置了环境变量,所以直接执行mongo。要是没有配置,可以查看mongo的安装目录
执行,效果一样。
创建用户
定义
db.
createUser
(user, writeConcern)
{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...]
serverAddress: ["<IP>" | "<CIDR range>", ...]
},
...
],
mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
passwordDigestor: "<server|client>"
}
参数详解
user(需要创建的用户信息)
- user:新建用户名
- pwd:新建用户密码
- customData:存放一些用户相关的自定义数据
- roles:数组类型,配置用户的权限
角色类型 | 权限级别 |
---|---|
普通用户角色 | read、readWrite |
数据库管理员角色 | dbAdmin、dbOwner、userAdmin |
集群管理员角色 | clusterAdmin、clusterManager、clusterMonitor、hostManager |
数据库备份与恢复角色 | backup、restore |
所有数据库角色 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase |
超级用户角色 | root |
核心角色 | __system |
writeConcern(对写操作时的异常处理机制)
下面我们列一下WriteConcern的几种抛出异常的级别参数:
- WriteConcern.NONE:没有异常抛出
- WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
- WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
- WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
- WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
- WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
- WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
代码案例
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
mydb 0.000GB
test 0.000GB
> use mydb
switched to db mydb
> db.createUser({user:"lisi",pwd:"123456",roles:[{role:"readWrite",db:"mydb"},{
... "role" : "userAdmin",
... "db" : "mydb"
... }
... ]})
Successfully added user: {
"user" : "lisi",
"roles" : [
{
"role" : "readWrite",
"db" : "mydb"
},
{
"role" : "userAdmin",
"db" : "mydb"
}
]
}
>
使用lis账号登录
1、先停止mongo
2、修改启动配置为开启验证
3、启动
4、客户端用lisi账号登录
操作
查找指定用户
方法一
db.system.users.find()
方法二
db.getUser(username, args)
参数详解
username:要查找的用户名
args(查询用户时的附加参数)
- showPrivileges:布尔值,默认为false。贤惠用户的权限
- showCredentials:布尔值,默认为false。显示用户的password hash
查找全部用户
db.getUsers()
修改用户
定义
db.updateUser(username, update, writeConcern)
db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
},
writeConcern: { <write concern> }
)
代码案例
db.updateUser(
"lisi",{
customData:{
create_time:"2019-05-28",
update_time:"2019-05-29"
},
pwd:"123456"
}
)
修改用户密码
db.changeUserPassword(username, password)
参数详解
username:要修改的用户名
password:要修改的密码
mechanism:密码验证机制
- SCRAM-SHA-1
- MONGODB-CR
digestPassword:布尔值,是否为加密密码
代码案例
db.changeUserPassword("lisi", "1234567")
删除用户
方式一
db.system.users.remove(query)
方式二
db.removeUser(username)
方式三
db.dropUser(username, writeConcern) //从当前数据库删除用户
db.dropAllUsers(writeConcern) //从当前数据库删除所有用户
用户绑定角色
db.grantRolesToUser( "<username>", [ <roles> ], { <writeConcern> } )
用户角色解绑
db.revokeRolesFromUser( "<username>", [ <roles> ], { <writeConcern> } )
用户Shell登录权限
db.auth( <username>, <password> )
db.auth( {
user: <username>,
pwd: <password>,
mechanism: <authentication mechanism>,
digestPassword: <boolean>
} )