MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别
帐号是跟着库走的,所以创建用户需要在指定库里创建
添加用户
用有权限的用户(如admin),登入主节点,选中对应需要加用户的数据库,执行:
db.createUser({
user:'用户名',
pwd:'密码',
roles:[
{
role: "read",
db: "数据库名"
}
]
});
展示当前数据库的用户及权限
show users;
修改用户密码
db.changeUserPassword('用户名','密码');
更新用户
db.updateUser(
"用户名",
{
roles:[
{
role: "read",
db: "数据库名"
}
],
pwd: "密码"
}
)
在原有基础上增加用户权限
db.grantRolesToUser(
"用户名",
[
{
role:"readWrite",
db:"数据库名"
}
]
)
删除用户
db.dropUser("用户名")
权限说明
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
其他
我们在查看服务当前连接有那些, 可以执行
db.serverStatus().connections;
如果发现没有执行该指令的权限, 比如:
not authorized on admin to execute command { serverStatus...
应该使用超级管理员用户切换到admin数据库去执行该指令, 如果不是超级管理员, 需要对该用户(比如admin用户)授权root权限
db.grantRolesToUser("admin",[{role:"root",db:"admin"}])
上述指令只能查到当前的连接数量,没有详细的客户端IP信息, 比如如下结果:
{
"current" : 14,
"available" : 838846,
"totalCreated" : 8922168,
"active" : 2
}
如果想要查看连接的IP和端口, 可以使用:
db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)})
得到如下结果示例:
"172.16.20.180:51302"
"172.16.20.180:44510"
"172.16.50.240:36624"
"172.16.50.240:52220"
网友评论