每个MongoDB的数据库都可以有许多用户,如果开启了安全性检查,则只有数据库认证用户才能执行相关的操作。admin的用户可以对任何数据库进行读写操作,其他数据库的用户只能执行相关权限的操作。
开启安全检查前,先创建几个用户:
由于mongodb的新版本引入了role的概念,所以直接创建db.addUser(‘xxx’, ‘xxx’)会出现。Warning但依然创建了用户。
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "test1", "roles" : [ "read" ] }
那么我们只讲大致讲一下现在如何新建用户。
查看roles
show roles
系统中有很多角色,我们关注几个。
现在我也没有完全搞懂他这里面的所有角色定位。以后细看一下。
我们先看一下,现在系统中是没有任何用户的
我们新建立两个用户看看
use admin
# 创建root用户(超级用户,可用这个先在admin中验证后再在其他库中操作)
db.createUser({user: 'root', pwd: 'xxxxxxxxx', roles: [ { role: 'root', db: 'admin'} ]})
use test
# 创建test用户
db.createUser({user: 'test', pwd: 'xxxxxxxxx', roles: [ { role: 'dbOwner', db: 'test'} ]})
use admin
db.system.users.find()
重启mongodb并且加上–auth选项(注意以后开机自启动也加上–auth选项)
pkill mongod
/usr/local/mongodb/bin/mongod --auth --dbpath=/data2/mongodbData/ --logpath=/data2/mongodbLogs --fork
# 修改/etc/rc.local中的mongod的启动项并且也加上--auth
然后再链接mongo客户端
可以看到不auth的时候show tables是看不到的。但use admin之后,还是看不到admin的表
如果用admin的用户登录呢,图如下:
可以看到admin库中的用户是全局用户。
再附带两个删除用户的。注:它们只是对当前库用户有效
删除admin库下root用户
use admin
db.dropUser("root", {w: "majority", wtimeout: 5000})
删除admin库下所有用户
use admin
db.dropAllUsers( {w: "majority", wtimeout: 5000} )
总结一点:mongodb目前授权我感觉还是比较混乱。可能我还不是太明白原理。以后重新写下。再说明一点,以前的addUser和deleteUser在2.6中虽然可用,但不推荐了,所以本文中说明均是以createUser和dropUser来做的讲解。