MongoDB开启权限认证

本文主要讲解MongoDB开启认证过程中需要完成的事项,包括建立超级用户、如何管理用户、什么是角色、如何赋予角色等等。


MongoDB version: v3.4.4


MongoDB默认是不开启权限认证的,而我也是一直这么做的。

自从上次MongoDB爆发了赎金门事件(点我),必须重视下MongoDB的权限认证了。


开启认证也很简单,在配置文件(默认是/etc/mongodb.conf)里面加入auth = true这样一行就行了。


这时你重启MongoDB服务进入mongo shell都是没问题的。但是如果你想插入一条数据,那么问题来了:


use foo;
db.bar.insert({'faf': 'faf'})
WriteResult({
        "writeError" : {
                "code" : 13,
                "errmsg" : "not authorized on foo to execute command { insert: \"bar\", documents: [ { _id: ObjectId('5938e7f63be90aa05e12aecc'), faf: \"faf\" } ], ordered: true }"
        }
})


说明权限认证生效了,一个没有认证通过的用户再也不能使用数据库了(即使能进mongo shell)。


那么问题又来了,我现在没有用户咋办?这是一个鸡和蛋的问题。怎么在没有用户的情况下新建用户?


MongoDB的开发者早已经想到了这一步。MongoDB自带一个数据库叫admin,这个数据库用来管理所有数据库的,类似于MySQL的mysql数据库。如果这个数据库的管理员账户还没有建立,那么任何人都可以在admin数据库里面新建管理员账户。


use admin;
db.createUser({user: 'admin', pwd: 'adminer', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]})


先进入admin数据库,然后运行db.createUser方法新建用户。createUser方法必须传入一个有user(用户名)、pwd(密码),roles(角色)三个属性的JSON对象。user、pwd都可以理解,那这个角色又是啥?当我们尝试去管理一个数据库的时候发现,有很多权限需要处理,比如:数据库读、数据库写、数据库用户管理等等权限,我想建一个用户的话,给一个用户赋权限就十分复杂了。现在一种流行的方式是:我先定义一个角色,这个角色对应一组权限,那么我管理用户时就只要赋予一个角色就行了。真是方便了不少。那么这个userAdminAnyDatabase角色就是这样一个超级角色,有这个角色的用户可以给任意数据库新建用户,并且赋予任何角色,真是个狠角色。那么我们应该知道了,基本上所有的第一个建立的用户的角色都应该是userAdminAnyDatabase,好处就是以后可以用这个用户来管理其他用户了。


那么MongoDB内置了哪些角色呢?

MongoDB把角色分为了7类,分别是:Database User Roles,Database Administration Roles, Cluster Administration Roles,Backup and Restoration Roles,All-Database Roles,Superuser Roles,Internal Role

十分复杂,为了简单起见,就讲其中两个:read、readWrite也就是常用的读数据库和读写数据库。

建立了admin用户之后,还必须登录才行(必须在admin数据库才能登录),db.auth('admin', 'adminer'),我再切换到foo数据库就可以给foo数据库创建用户啦(这里有一个不大不小的坑,就是你要给其他数据库创建用户,都必须先到admin数据库,认证刚才新建的那个admin用户,然后再切换到其他数据库才能建立用户)!

use foo;
db.createUser({user: 'foo', pwd: 'bar', roles: [{role: 'readWrite', db: 'foo'}]})
db.auth('foo', 'bar')


就可以往数据库里面写入啦!!!


  • 发表于 2017-06-08 14:37
  • 阅读 ( 3107 )
  • 分类:编程语言

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
deepxin

生物信息软件开发工程师

12 篇文章

作家榜 »

  1. 祝让飞 118 文章
  2. 柚子 91 文章
  3. 刘永鑫 64 文章
  4. admin 57 文章
  5. 生信分析流 55 文章
  6. SXR 44 文章
  7. 张海伦 31 文章
  8. 爽儿 25 文章