开启连接MongoDB的用户校验

发布:elantion 日期:2018-07-11 阅读:1800 评论:0

一般来说,如果你的程序和MongoDB是在同一台服务器,而且外界无法触及你的MongoDB,那么你是没必要开启用户校验的,加上了只会增加不必要的麻烦。但因为我公司不允许我开发机有一个无密码的数据库,强制我增加了这个没啥意义的用户校验。。。(公司的安全团队真烦啊。。。)

添加登录用户

新安装的MongoDB,默认情况下,连接MongoDB是不需要用户名的,直接使用mongo命令即可连接MongoDB数据库并登录:

mongo

校验用户的信息是保存在admin数据库里的,所以我们要切换到该库:

use admin

用下面的命令添加一名用户,该用户拥有至高无上的权限,除了可以控制本地所有的数据库,还可以创建用户、授权用户、授予角色等权限:

db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "root", db: "admin" } ]
  }
)

一旦添加了这用户,以后你要创建新的用户必须以这个用户登录才可以创建,不能再以无密码无账号的方式来管理MongoDB了。

修改角色

如果需要修改用户角色,可以使用以下命令:

db.grantRolesToUser('myUserAdmin',[{ role: "root", db: "admin" }]) 

别忘了在执行前切换数据库哦:use admin

更改安全配置

既然添加了用户,我们以后就不能允许没密码的用户连接了,修改/usr/local/etc/mongod.conf,如下:

systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1
security:
  authorization: enabled

跟默认不一样的地方在最后面添加了security配置

用新用户名登录

添加了管理员用户之后,就可以用这个管理员的账号密码登录了。

如果使用mongo客户端来登录,需要加一些参数:

mongo -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

后面那个authenticationDatabase很长很烦,但必须要加,这是告诉MongoDB用户信息存在那个数据库,还记得上面在那个数据库里添加用户数据吗?对,admin

如果你使用的是mongoose,把链接改成下面这样就可以:

const dbUrl = 'mongodb://myUserAdmin:abc123@localhost:27017/myDatabase?authSource=admin';

好了,教程到这儿结束,还有那儿不能理解吗?