felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

MongoDB 开启权限认证(设置账号密码) #76

Open felix-cao opened 5 years ago

felix-cao commented 5 years ago

用户权限管理很重要,只给需要的权限,防止应用系统漏洞导致脱库

认证和授权

在 MongoDB安装--Centos系统下yum方式安装 #70 中, 我们提到 MongoDB 默认安装完成以后,只允许本地连接,不需要使用任何账号密码就可以直接连接MongoDB,这样的话,安全性就会存在问题,所以我们需要给Mongo开启认证授权,设置一个账号和密码;

设置账号和密码

mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。

  1. 进入 mongodb

    $ mongo
  2. 启用 admin 数据库 创建一个管理员用户, role 为 userAdminAnyDatabase

> use admin
switched to db admin
> db.createUser({user: 'admin', pwd: 'weatcoin', roles: [{role: 'userAdminAnyDatabase', db:'admin'}]})

创建一个超级管理员用户

> db.createUser({user: 'root', pwd: 'weatcoin', roles: [{role: 'root', db:'admin'}]})

先进入admin数据库 然后运行db.createUser方法新建用户。createUser方法必须传入一个有user(用户名)、pwd(密码),roles(角色)三个属性的JSON对象。

开启认证

在配置文件(默认是/etc/mongodb.conf)里面加入下面的代码:

security:
  authorization: enabled

重启

systemctl restart mongod

本地连接

$ mongo admin -u root -p weatcoin

远程连接

远程连接到 mongoDB 服务器时,mongodb在验证身份的时候需要指定你验证的这个用户所在的数据库,默认为admin

假设你 的 mongoDB服务器(47.75.134.199), 有一个 weatcoin 的数据库,为了能远程连接到这个库需要2步:

1)、给 weatcoin 库 指定一个账号

> use weatcoin
switched to db admin
> db.createUser({user: 'weatadmin', pwd: 'weatcoin', roles: [{role: 'readWrite', db:'admin'}]})

2)、连接

mongoose.connect('mongodb://weatadmin:weatcoin@47.75.134.199:27107/weatcoin',{ useNewUrlParser: true });

Reference