注意:
A)在mongodb中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据.
即 use admin , -->相当于进入超级用户管理模式.
B)mongo的用户是以数据库为单位来建立的, 每个数据库有自己的管理员.
C) 启动auth模块之前就应该创建一个超级用户
添加用户
命令:db.addUser();(过时了)
简单参数: db.addUser(用户名,密码,是否只读)
注意: 添加用户后,我们再次退出并登陆,发现依然可以直接读数据库?
原因: mongodb服务器启动时, 默认不是需要认证的.
要让用户生效, 需要启动服务器时,就指定 --auth 选项.
这样, 操作时,就需要认证了.
mongoDB add user in v3.0 问题的解决(Property 'addUser' of object admin is not a func)
问题:创建mongodb帐户时,出错
> db.addUser(“accountUser”, “password”)
2015-08-05T20:03:02.767+0800 E QUERY TypeError: Property 'addUser' of object admin is not a function
#最终解决方案:
采用以下这种方式增加用户
参考:http://docs.mongodb.org/manual/reference/method/db.createUser/#create-administrative-user-with-roles
创建超级管理员
MongoDB在V3.0版本之后内置了root 角色,也就是结合了readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin4个角色权限,类似于Oracle的sysdba角色,但是MongoDB的超级管理员用户名称是可以随便定义的:
> use admin
switched to db admin
> db.createUser(
... {
... user: "admin",
... pwd: "123456",
... roles: [ { role: "root", db: "admin" } ]
... }
... )
创建普通用户
用可以对test123数据库读写的rwtest123用户为例:
> use test123
switched to db test123
> db.createUser(
... {
... user: "rwtest123",
... pwd: "123456",
... roles: [ { role: "readWrite", db: "test123" } ]
... }
... )
Successfully added user: {
"user" : "rwtest123",
"roles" : [
{
"role" : "readWrite",
"db" : "test123"
}
]
}
#所建的rwtest123用户可以在test123数据库中进行增删改查操作,但是其他操作就不行了
>db.auth('rwtest123','123456')
switched to db test123
> db.test123.insert({"test":"test"})
WriteResult({ "nInserted" : 1 })
> db.test123.find()
{ "_id" : ObjectId("563332ebc8a59ae4fe96bbf5"), "test" : "test" }
> db.test123.drop()
true
> use test100
switched to db test100
> db.test100.find()
Error: error: { "$err" : "not authorized for query on test100.test100", "code" : 13 }
>
例:
1: 认证
> use test
> db.auth(用户名,密码);需要use admin下认证
2: 修改用户密码
> use test
> db.changeUserPassword(用户名, 新密码);
3:删除用户
> use test
> db.dropUser(用户名);
db.removeUser(用户名);(过时了)
4: 查看用户
db.system.users.find()