MongoDB的安全权限访问控制,国内出版的书籍,网上找到博文全是使用db.addUser(username,password)来增加用户。在MongoDB 3.0中执行次方法会报错。
提升信息可以看出系统找不到该方法。原因是这个方法在3.0中已经被废弃了。
在使用MogoDB时,此时你 show dbs 会看到只有一个local数据库,那个所谓的超级管理员admin是不存在的而存在一个超级管理员用户userAdminAnyDatabase。
现在我们先给我们的MogoDB添加一个超级管理员:
查看MongoDB官方文档: 添加用户使用的是db.createUser()
官方文档的原文如下:
db.createUser(user, writeConcern)
Creates a new user for the database where the method runs. db.createUser() returns a duplicate user error if the user already exists on the database.
如上看出createUser需要两个参数: user 与 writeConcern。
user的示例:
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
user只需要四个字段:用户名,密码,用户说明,角色等等。其中customData是可选的。而至于roles可以写一个空是数组。
例如:
db.createUser(
{ user:"root",
pwd:"toor",
roles:[ ]}
)
我们添加的是一个超级管理员:
use admin
db.createUser(
{
user: "root",
pwd: "toor",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
与之前的版本一样,用户依然保持在system.users集合下。
查看用户:
show users
或
db.system.users.find()
使用–auth启动MongoDB安全验证,然后我们在shell客户端中通过db.auth(“root”,”toor”)
此时执行一个查询操作会报错
Error: error: { "$err" : "not authorized for query on helloworld.persons", "code" : 13 }
这个因为我们给root用户赋予的是userAdminAnyDatabase角色。该角色没有读写权限,只有用户管理的权限。
创建可以读写数据库的角色:
use helloworld
db.createUser(
{
user: "wang",
pwd: "123456",
roles: [
{ role: "readWrite", db: "helloworld" },
{ role: "read", db: "test" }
]
}
)
这样创建的用户在helloworld中是可读写的角色,在test中是只读角色。
现在我们来看MongoDB 3.0中都有什么roles:
可以参考这篇MongoDB官方文档的翻译版本:
http://www.cnblogs.com/SamOk/p/5162767.html
参考: