用户及权限管理
验证库:建立用户时use到的库,在使用用户时,要加上验证库才能登陆。
对于管理员用,必须在admin下创建
1.建立用户时,use到的库,就是此用户的验证库
2.登陆时,必须明确指定验证库才能登陆
3.通常,管理员的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
4.如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的。
5.从3.6版本开始,不添加bind Ip参数,默认不让远程登录,只能本地管理员登录。
注意: mongodb 服务默认是未开启权限验证的,所以在创建和设置完用户后需要启用权限验证,以及重启服务。
linux下 启动时使用
mongo --auth
或 修改mongo.conf,最后一行添加如下内容,然后重启服务。#启用权限访问 auth=true
windows下 修改mongodb服务
进入系统注册表(WIN+R-->regedit
)
找到[HKEY_LOCAL_MACHINE-->SYSTEM-->CurrentControlSet-->Services-->MongoDB
]
在右边的健-值列表中打到 “ImagePath” 在该值中 添加 --auth
,然后重启服务。
1、创建用户的命令
use admin
db.createUser
{
user: "<name>",
pwd: "<cleartext password>",
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}
备注:要选择某个库登录,就use 到哪个库下面创建用户,并赋予相应的权限;
基本语法说明:
- user: 用户名
- pwd: 密码
- roles:
role:角色名
db:作用对象(集合)
角色说明
**数据库用户角色**
read: 只读数据权限
readWrite:学些数据权限
**数据库管理角色**
dbAdmin: 在当前db中执行管理操作的权限
dbOwner: 在当前db中执行任意操作
userAdmin: 在当前db中管理user的权限
**备份和还原角色**
backup
restore
**跨库角色**
readAnyDatabase: 在所有数据库上都有读取数据的权限,只在admin数据库中可用
readWriteAnyDatabase: 在所有数据库上都有读写数据的权限,只在admin数据库中可用
userAdminAnyDatabase: 在所有数据库上都有管理user的权限,只在admin数据库中可用
dbAdminAnyDatabase: 管理所有数据库的权限,只在admin数据库中可用
**集群管理**
clusterAdmin: 管理机器的最高权限,只在admin数据库中可用
clusterManager: 管理和监控集群的权限
clusterMonitor: 监控集群的权限
hostManager: 管理Server
**超级权限**
root: 只在admin数据库中可用。超级账号,超级权限
示例
# 创建root用户
use admin
db.createUser({user:'root',pwd:'root123',roles:['root']})
# 创建admin用户
use admin
db.createUser({user:'admin',pwd:'admin123',roles:[{role:'dbAdminAnyDatabase',db:'admin'}]})
2、查看用户
show users
db.system.users.find()
db.runCommand({usersInfo:'userName'})
3、编辑用户和修改密码
# 修改用户权限或密码
db.updateUser('userName',{pwd:'密码',roles:[......]})
# 修改密码
db.changeUserPassword('userName','xxx')
# 修改密码和用户信息
db.runCommand(
{
updateUser:"username",
pwd:"xxx",
customData:{title:"xxx"}
}
)
4、删除用户
db.dropUser('userName')
5、使用账号登录
# 进入 mongo 的shell之后,需要验证账号权限,否则无法查询和使用
db.auth('账号','密码')
作者:joker.liu 创建时间:2022-07-01 16:54
最后编辑:admin 更新时间:2023-10-15 16:13
最后编辑:admin 更新时间:2023-10-15 16:13