关于MongoDB 3.0的权限,通过各种搜索大神,出来一片错误的坑文,其实通过阅读官方文档得知,老版用户创建方法已不复存在,已有新方法代替。
首先我们在配置文件mongodb.conf中,权限配置auth不要进行配置,待创建管理用户后再开启该配置。
首先我们来设置职能管理用户的权限,它对应的角色为:userAdminAnyDatabase或userAdmin
1、添加管理用户:
use admin
db.createUser(
{
user: "admin",
pwd: "admin",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" }
]
}
)
注意:这里的的db.createUser()是新版中创建用户的方法,它替换老本的db.addUser()用户创建方法。
2、当前在admin数据库命名下,通过以下命令查看admin数据库命名下的所有用户信息:
show users
或者
db.system.users.find()
此时,如果用户列表包含刚刚创建的admin用户,表示用户创建成功。
3、开启配置文件的auth属性,并重新启动mongoDB
通过命令查询mongo的PID:
ps aux | grep mongo
root 5204 0.3 3.4 687224 66652 Sl 15:28 0:09 ./mongod -f mongodb.conf
5024代表当前启动的mongo进程的PID,通过kill命令结束该进程:
kill -2 5024
注意:千万不要通过kill -9 PID来结束进程,通过kill -2 PID或者通过db.shutdownServer()完成操作
再次启动mongoDB:
./mongod -f mongodb.conf
4、连接mongoDB
./mongo --port 27017
连接成功后,命令行会变为">"符号的起始符号
5、认证用户,返回1时表示认证成功
db.auth('admin','admin')
认证用户语法:db.auth(username,pwd),两个参数分别是:username为用户名,pwd为密码。用户名和密码均为开始通过db.createUser方法创建用户时指定的用户名和密码。
6、创建操作权限用户
admin用户,前边已经提到,指定它的role为userAdminAnyDatabase,只有管理用户权限,我们只能通过它来创建用户等一系列用户管理操作。无法进行mongoDB数据库操作,例如利用下列命令,查看当前数据库命名下的所有集合,会报错:
show collections
此时,我们需要切换到具体的数据库命名下,再次利用db.createUser方法,为单个数据库命名空间创建用户。
我们为eugene数据库命名空间创建用户eugene,密码为eugene:
use eugene
db.createUser(
{
user: "eugene",
pwd: "eugene",
roles: [
{ role: "readWrite", db: "eugene" }
]
}
)
roles中的role可指定的具体值为:read, readWrite, dbAdmin, root
这里,我们指定eugene用户拥有eugene数据库命名的读写权限。
7、在eugene数据库命名空间下,认证拥有数据库操作权限的用户
db.auth("eugene","eugene")
此时,已拥有了eugene数据库的读写权限,为所欲为吧!
创建用户的官方文档:http://docs.mongodb.org/manual/core/authorization/
权限说明的官方文档:
http://docs.mongodb.org/manual/core/authorization/
http://docs.mongodb.org/manual/reference/built-in-roles/