本教程详细指导大家如何开启并设置用户权限。MongoDB默认是没有开启用户权限的,如果直接在公网服务器上如此搭建MongoDB,那么所有人都可以直接访问并修改数据库数据了。 其实MongoDB本身有非常详细的安全配置准则,显然开发者也是想到了,然而他是将安全的任务推给用户去解决,这本身的策略就是偏向易用性的,对于安全性,则得靠边站了。
MongoDB有两种用户,一种是admin用户(这里以root为例),能查看所有数据库;另一种数据库用户(这里以dbuser为例),只能查看特定数据库。
首先输入mongo
进入MongoDB shell命令模式:
1、在admin表中添加root用户,在test表中添加dbuser用户
use admin
db.addUser('root','123') #用户名:root,密码:123
use test
db.addUser('dbuser','123') #用户名:dbuser,密码:123
MongoDB所有的用户信息都是存储在admin数据库中system.users表中,截图如下:
2、修改/etc/mongodb.conf,设置auth=true
sudo vim /etc/mongodb.conf
/etc/mongodb.conf文件中本来就有配置auth=true,只需要删除前面的“#”即可。截图如下:
3、重启MongoDB
service mongodb stop #停止MongoDB服务(因为MongoDB是随开机是自启动的)
service mongodb start #开启MongoDB服务
4、测试用户权限是否正常开启
试图查看test数据库的所有集合,发现查看失败;验证test数据库用户dbuser;再次查看test所有集合,发现查看成功。截图如下:
试图查看School数据库的所有集合,发现查看失败,因为dbuser是test数据库的用户,无法验证School数据库;切换到admin数据库,验证root用户名;再切换回School数据库,查看其所有集合,发现查看成功。截图如下:
这里需要指出的是,验证用户不是切换用户,只要验证过用户,就拥有了对该数据库的操作权限,如我先验证了root用户,再验证dbuser用户(test数据库的用户),依然可以操作School数据库,因为验证过root用户,仅对当次shell模式有效,退出shell之后再进入shell需要重新验证。