@a5635268
2015-08-20T17:46:07.000000Z
字数 2266
阅读 1476
mongoDB
在mongodb3.0版本以前中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据库.即 use admin , 相当于进入超级用户管理模式,mongo的用户是以数据库为单位来建立的, 每个数据库有自己的管理员.我们在设置用户时,需要先在admin数据库下建立管理员---这个管理员登陆后,相当于超级管理员.
命令:db.addUser();
简单参数: db.addUser(用户名,密码,是否只读)
注意: 添加用户后,我们再次退出并登陆,发现依然可以直接读数据库?
原因: mongodb服务器启动时, 默认不是需要认证的.
要让用户生效, 需要启动服务器时,就指定--auth
选项.这样, 操作时,就需要认证了.
# 添加用户
> use admin
> db.addUser('admin','admin',false); # 3.0版本更改为createUser();
# 删除用户
> use test
> db.removeUser(用户名); # 3.0版本更改为dropUser();
在3.0版本以后,mongodb默认是没有admin这个数据库的,并且创建管理员不再用addUser,而用createUser;
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> }, # 任意的数据,一般是用于描述用户管理员的信息
roles: [
{ role: "<role>", db: "<database>" } | "<role>", # 如果是role就是直接指定了角色,并作用于当前的数据库
...
] # roles是必传项,但是可以指定空数组,为空就是不指定任何权限
}
Built-In Roles(内置角色):
官方Example
use products # mongoDB的权限设置是以库为单位的,必选要先选择库
db.createUser(
{ "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"
] },
{ w: "majority" , wtimeout: 5000 } ) # readWrite 适用于products库,clusterAdmin与readAnyDatabase角色适用于admin库
writeConcern文档(官方说明)
use shop;
db.createUser({
user:'admin',
pwd:'zhouzhou123',
roles:['dbOwner']
})
只要新加了一个用户,admin数据库就会重新存在;
mongo --host xxx -u admin -p zhouzhou123 --authenticationDatabase shop # 用新创建的用户登录
# 查看当前用户在shop数据库的权限
use shop;
db.runCommand(
{
usersInfo:"shopzhouzhou",
showPrivileges:true
}
)
# 查看用户信息
db.runCommand({usersInfo:"userName"})
# 创建一个不受访问限制的超级用户
use admin
db.createUser(
{
user:"superuser",
pwd:"pwd",
roles:["root"]
}
)
> use test
> db.auth(用户名,密码); #注意是以库为单位,必须先选择库;
# 删除用户
> use test
> db.dropUser('用户名');
> use test
> db.changeUserPassword(用户名, 新密码);
# 修改密码和用户信息
db.runCommand(
{
updateUser:"username",
pwd:"xxx",
customData:{title:"xxx"}
}
)
参考: http://blog.csdn.net/kk185800961/article/details/45619863