sszxf 发表于 2018-10-25 07:42:15

MongoDB账号权限管理

  一、掌握权限,理解下面4条基本上就差不多
  1、mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
  2、切换到admin数据库,添加的账号才是管理员账号。
  3、用户只能在用户所在数据库登录,包括管理员账号。
  4、管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪
  现假如需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)
  权限认证参考文档:很详细的
  http://www.cnblogs.com/xiaoqian1993/p/5944039.html
  http://hae.iteye.com/blog/2183478
  下面简单的演示实例:
  首先开启auth认证,然后登陆admin库
  >use admin
  > db.auth("myUserAdmin","abc123");
  1
  一.创建一个账户:
  db.createUser(
  {
  user: "root",
  pwd: "123456",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
  )
  > db.createUser(
  ...{
  ...user: "root",
  ...    pwd: "123456",
  ...   roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  ...}
  ...)
  Successfully added user: {
  "user" : "root",
  "roles" : [
  {
  "role" : "userAdminAnyDatabase",
  "db" : "admin"
  }
  ]
  }
  >use admin
  >db.auth("root","123456")
  1
  > show collections;
  system.indexes
  system.users
  system.version
  > db.system.users.find();
  { "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "e4E3GbhPQ0o4VncvLNkx9w==", "storedKey" : "BWspVPoN4cHAnfTMGPdmocxXRXI=", "serverKey" : "r2imS6HjYvOeR2A9vos3q1YiW9A=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
  { "_id" : "admin.myUserAdmin", "user" : "myUserAdmin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "c/5/KlFYNv16HsROHzKRWQ==", "storedKey" : "ZQH0ieZyNlJw0K/q8SZdg5WUonc=", "serverKey" : "2f5uNXkYVuZR7cWnOYXO9n3w7dw=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
  二.创建管理dbtest00库的用户:
  > use dbtest001;
  switched to db dbtest001
  > show collections;
  2017-08-22T13:00:29.355+0800 E QUERY    Error: listCollections failed: {
  "ok" : 0,
  "errmsg" : "not authorized on dbtest001 to execute command { listCollections: 1.0 }",
  "code" : 13
  }
  at Error ()
  at DB._getCollectionInfosCommand (src/mongo/shell/db.js:646:15)
  at DB.getCollectionInfos (src/mongo/shell/db.js:658:20)
  at DB.getCollectionNames (src/mongo/shell/db.js:669:17)
  at shellHelper.show (src/mongo/shell/utils.js:625:12)
  at shellHelper (src/mongo/shell/utils.js:524:36)
  at (shellhelp2):1:1 at src/mongo/shell/db.js:646
  报错:
  原因是未创建管理这个数据库dbtest001的用户
  创建管理dbtest00库的用户:
  use admin
  db.auth("root","123456")
  切换到dbtest001库
  use dbtest001
  db.createUser(
  {
  user: "DBA1",
  pwd: "123456",
  roles: [ { role: "readWrite", db: "dbtest001" } ]
  }
  )
  > db.auth("DBA1","123456");
  1
  > show collections;
  chenji
  system.indexes
  三.创建DBA2dbtest001对数据库dbtest001只读:
  db.createUser(
  {
  user: "DBA2",
  pwd: "123456",
  roles: [ { role: "read", db: "dbtest001" } ]
  }
  )
  切换到dbtest001库下查看当前的库的管理账户:
  > use dbtest001;
  switched to db dbtest001
  > db.auth("DBA2","123456");
  1
  > db.chenji.insert({"name":"李旭","年纪":"三年级","年龄":"30"});
  WriteResult({
  "writeError" : {
  "code" : 13,
  "errmsg" : "not authorized on dbtest001 to execute command { insert: \"chenji\", documents: [ { _id: ObjectId('599bbd47a6bc55821e3b1f8e'), name: \"李旭\", 年纪: \"三年级\", 年龄: \"30\" } ], ordered: true }"
  }
  })
  提示报错:原因是这个DBA2用户对这个dbtest001库是只读权限
  > use dbtest001;
  switched to db dbtest001
  查看有权限管理dbtest001库的用户:
  > show users;
  {
  "_id" : "dbtest001.DBA1",
  "user" : "DBA1",
  "db" : "dbtest001",
  "roles" : [
  {
  "role" : "readWrite",
  "db" : "dbtest001"
  }
  ]
  }
  {
  "_id" : "dbtest001.DBA2",
  "user" : "DBA2",
  "db" : "dbtest001",
  "roles" : [
  {
  "role" : "read",
  "db" : "dbtest001"
  }
  ]
  }
  四.删除用户
  > db.dropUser("DBA1");
  true
  > show users;
  {
  "_id" : "dbtest001.DBA2",
  "user" : "DBA2",
  "db" : "dbtest001",
  "roles" : [
  {
  "role" : "read",
  "db" : "dbtest001"
  }
  ]
  }
  > db.dropUser("DBA2");
  true
  > show users;
  五.超级权限root用户
  有没有一个超级权限?不仅可以授权,而且也可以对集合进行任意操作?答案是肯定的,只是不建议使用。那就是role角色设置成root
  #超级root帐号
  db.createUser(
  ...{
  ...    user: "jianwei",
  ...    pwd: "123456",
  ...    roles: [
  ...       { role: "root", db: "admin" }
  ...    ]
  ...}
  ... )
  mongodb 修改用户密码 2种方法
  1.正确做法,利用db.createUser
  有人会问,这个不是添加用户的方法吗。不错这是添加用户的方法,但是如果用户名相同,密码不同的话,就会更新密码。
  2.,正确做法,利用db.changeUserPassword
  db.changeUserPassword
  >db.changeUserPassword("myUserAdmin","abc123");
  > db.auth("myUserAdmin","abc123");
  1
  > show dbs;
  admin      0.078GB
  dbtest0010.078GB
  dbtest0020.078GB
  local      0.078GB
  temp       0.078GB
  注意:此处开启auth 认证

页: [1]
查看完整版本: MongoDB账号权限管理