@a5635268
2015-08-20T09:46:07.000000Z
字数 2266
阅读 1656
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 admindb.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
