身份验证
身份验证是验证试图连接数据库的客户机的身份的过程。MongoDB提供各种方法来验证客户机的身份。基于挑战的默认策略包括:
显示数据库下用户信息
show users
字段解析:
删除用户
db.dropUser('gao')
修改用户密码
db.changeUserPassword(“要修改密码的用户名”,”新密码”)
修改权限
updateUser官方语法
{
updateUser: "",
pwd: passwordPrompt(), // Or ""
customData: { },
roles: [
{ role: "", db: "" } | "",
...
],
authenticationRestrictions: [
{
clientSource: ["" | "", ...],
serverAddress: ["", | "", ...]
},
...
],
mechanisms: [ "", ... ],
digestPassword: ,
writeConcern: { }
}
例:db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})
注:updateuser它是完全替换之前的值,如果要新增或添加roles而不是代替它
则使用方法: db.grantRolesToUser() 和 db.revokeRolesFromUser()
例:
db.grantRolesToUser("usertest", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}]) # 修改权限
db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}]) # 删除权限:
删除用户
db.dropUser('usertest')
创建新用户
官方语法:
{
user: "",
pwd: passwordPrompt(), // Or ""
customData: { },
roles: [
{ role: "", db: "" } | "",
...
],
authenticationRestrictions: [
{
clientSource: ["" | "", ...],
serverAddress: ["" | "", ...]
},
...
],
mechanisms: [ "", ... ],
passwordDigestor: ""
}
例:
db.createUser(
{
user: "dba",
pwd: "dba",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
db.createUser(
{
user: "maindataip",
pwd: "maindata",
roles: [ {role: 'readWrite', db: 'maindata'} ],
authenticationRestrictions: [ {
clientSource: ["10.xx.x.xxx", "10.xx.x.xxx","10.xx.x.xxx","xxx.x.x.1" ],
serverAddress: ["xx.xx.x.xxx"]
} ]
}
)
解析
注:mongodb内置角色
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
数据库用户角色
read:允许用户读取指定的数据库
readWrite:允许用户读写指定数据库
数据库管理角色
dbAdmin:允许用户在指定数据库执行管理函数,创建索引,删除索引,查看统计.
userAdmin:允许用户向system.users集合写入,可以在指定数据库创建删除管理账号
dbOwner:指定数据库最大的权限,是readWrite+dbAdmin+userAdmin的和。
群集管理角色(只在admin数据库可用)
clusterAdmin:用户所有分片和复制集相关函数的管理权限
clusterManager:管理和监控群集。
clusterMonitor:只能访问监控工具。
hostManager:监视和管理。
备份和还原角色
backup
restore
所有角色(只在admin数据库可用)
readAnyDatabase:赋予用户所有数据库的读权限
readWriteAnyDatabase:赋予用户所有数据库的读写权限
userAdminAnyDatabase:赋予所有数据库的useradmin权限
dbAdminAnyDatabase:赋予所有数据库的dbadmin权限。
超级角色(只在admin可用)
root:超级账号,超级权限
---------------------------------------------------以下无正文-----------------------------------------------------
mongodb用户设计:
admin:创建一个root权限,一个userAdminAnyDatabase权限
自定义数据库:一个dbOwner,根据需求建想要权限用户
需求:如增加一个数据库,在不添加用户的前提下能够管理新增库
解决方法:登录拥有userAdminAnyDatabase权限用户,到拥有该用户的库下给原有用户授权
例:db.grantRolesToUser("原有用户名",[{role:"readWrite",db:"新数据库"},{role:"角色“,db:"新数据库"}])
注:授权后,该用户并不属于新增数据库用户,只是拥有该新增库的管理权。
(给原有用户添加权限也可使用grantRolesToUser)