权限控制API

所有数据库的角色控制

首先在启用权限控制时,需要在启动MongoDB时指定启动,可以通过配置文件或启动命令添加:

  1. D:\MongoDB\Server\3.2\bin>mongod --auth

再次连接到MongoDB,执行命令时显示无权限了:

  1. > show dbs
  2. 2017-03-08T10:22:53.340+0800 E QUERY [thread1] Error: listDatabases failed:{
  3. "ok" : 0,
  4. "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
  5. "code" : 13
  6. } :

然后停掉授权模式,重新启动mongod,添加用户,分配权限:

  1. > db.createUser({user:'linfenliang',pwd:'123456',roles:[{role:'root',db:'admin'}]})
  2. Successfully added user: {
  3. "user" : "linfenliang",
  4. "roles" : [
  5. {
  6. "role" : "root",
  7. "db" : "admin"
  8. }
  9. ]
  10. }

再次连接到Mongodb,查看:

  1. D:\MongoDB\Server\3.2\bin>mongo.exe -u linfenliang -p 123456
  2. 2017-03-08T10:26:43.075+0800 I CONTROL [main] Hotfix KB2731284 or later update is not installed, will zero-out data files
  3. MongoDB shell version: 3.2.9
  4. connecting to: test
  5. > show dbs
  6. admin 0.000GB
  7. local 0.000GB
  8. test 0.013GB
  9. user_restore 0.000GB

查看admin下的system.users可以看到用户信息:

  1. > use admin
  2. switched to db admin
  3. > show collections
  4. system.users
  5. system.version
  6. > db.system.users.find()
  7. { "_id" : "test.linfenliang", "user" : "linfenliang", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "K65ZgJZS9hUtULJHAZ7vcg==", "storedKey": "pkki81sYP0tvuO4F6YcXTQCm3es=", "serverKey" : "/7y0nALEIU9PSeXNhXTVjmkAiLA=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }

role中root是权限最大的橘色,还有一些其他角色,可供参考:

readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabase 针对所有数据库的用户管理权限dbAdminAnyDatabase 针对所有数据库的管理权限

单个数据库的角色控制

主要是role改成了 dbOwner,

命令如下所示:

  1. > db.createUser({user:'lin',pwd:'123',roles:[{role:'dbOwner',db:'user_restore'}]})
  2. Successfully added user: {
  3. "user" : "lin",
  4. "roles" : [
  5. {
  6. "role" : "dbOwner",
  7. "db" : "user_restore"
  8. }
  9. ]
  10. }

然后在admin库中授权,然后切换到user_restore即可:

  1. > use admin
  2. switched to db admin
  3. > db.auth('lin','123')
  4. 1
  5. > use user_restore

单个数据库的授权,除了dbOwner以外,还有如下常用角色:

dbAdminuserAdmin

复制集与集群的权限控制

复制集以及集群的权限控制稍微要麻烦一些

复制集中:

  1. 创建一个包含6个字符以上的文件,并被部署到复制集中的每一个节点上,作为授权码
  2. 在每一个节点启动时,添加 —keyFile选项,并指向该文件地址

分片集群中:

与复制集中相似,均需要在启动时添加 keyFile选项并指向密码文件。