设为首页 收藏本站
查看: 988|回复: 0

[经验分享] MongoDB账号权限管理

[复制链接]

尚未签到

发表于 2018-10-25 07:42:15 | 显示全部楼层 |阅读模式
  一、掌握权限,理解下面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
  dbtest001  0.078GB
  dbtest002  0.078GB
  local      0.078GB
  temp       0.078GB
  注意:此处开启auth 认证


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-626093-1-1.html 上篇帖子: MongoDB查询集合中的文档 下篇帖子: mongodb 监控项详解(mms)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表