MongoDB用户权限

最近有个网站用到MongoDB,以前都没配置权限的,现在突然要用到安全的东西,网上有些文章都是旧版本的,也走了些弯路。

开始配置用户的权限,用户的权限有几种,权限分得非常细,混淆了一个dbAdminuserAdmin,我开始以为是同样的功能,原来userAdmin只是用来管理账号的,不能使用show collections...

更多详细内容参考:http://drops.wooyun.org/%E8%BF%90%E7%BB%B4%E5%AE%89%E5%85%A8/2470

下面是一些创建的用户

  • 超级管理用户,用来管理所有的用户
    db.createUser({user:"root",pwd:"root",roles:["userAdminAnyDatabase"]});

  • 数据查询用户

    • 任何数据库的查询和创建索引等一些操作
      db.createUser({user:"admin",pwd:"admin",roles:["dbAdminAnyDatabase", "readAnyDatabase"]});

    • admin数据库的查询和创建索引等一些操作,这里虽然是anyDatabase,但是后面加了db后就只能是admin数据库了
      db.createUser({user:"admin",pwd:"admin",roles:[{role:"dbAdminAnyDatabase", db:"admin"}, {role:"readWriteAnyDatabase", db:"admin"}]});

    • 和上面的功能是一样的
      db.createUser({user:"admin",pwd:"admin",roles:[{role:"dbAdmin", db:"admin"}, {role:"readWrite", db:"admin"}]});

有一些比较奇怪的地方:

如果你在admin数据库创建了对root数据库的查询权限,但是认证的时候必须到admin里面认证后再回到root数据库才可以进行查询。

MongoDB
MongoDB

我们看上面两张图,发现_id不一样,点号前面是你在哪个数据库创建这个用户的,必须要到该数据库下授权才可以成功。