MongoDB 3.0安全权限访问控制

MongoDB的安全权限访问控制,国内出版的书籍,网上找到博文全是使用db.addUser(username,password)来增加用户。在MongoDB 3.0中执行次方法会报错。

MongoDB 3.0安全权限访问控制_第1张图片

提升信息可以看出系统找不到该方法。原因是这个方法在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.

MongoDB 3.0安全权限访问控制_第2张图片

如上看出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

参考:

https://docs.mongodb.org

你可能感兴趣的:(mongodb,数据库,NoSQL,安全)