mongoDB开启密码验证
使用mongoDB开发测试一直在裸奔,今天在登陆系统时一直报错,链接上数据库才发现“我方防御塔被摧毁”,
万恶的黑客!
幸亏我的数据库没有什么真实数据,而且是用docker方式启动的,
思来想去,痛定思痛,原因还是在自己,偷懒了。为了避免以后仍然发生这种事情,开发也得加上用户验证配置。
下面记录自己配置用户和密码的步骤
配置流程
为mongodb增加用户名和密码分为以下几步:
1.在启动时加上--auth
配置开启验证,
docker使用以下命令:
sudo docker run -itd --name mongo_auth -p 27017:27017 mongo --auth
2.进入docker
sudo docker exec -it mongo_auth /bin/bash
如果是非docker,可直接省略此步骤
3.进入数据库shell
mongo
4.创建数据库超级管理员
执行
use admin; //切换admin库
db.createUser(
{
user:"root",
pwd:"pwd",
roles:["root"]
}
);//创建用户
db.auth("root",'root')//验证是否设置成功,返回1位通过,返回0为失败
注意,这里的用户不是业务数据库的用户,这是一个管理用户的用户。业务数据库用户是绑定在数据库中的,下面会创建。创建与用户相关操作都在 admin
数据库下进行,所以先要切换至admin
5.创建业务数据库管理员
db.createUser({
user:"user01",
pwd:"iamhappy",
roles:[
{role:"readWrite",db:"testdb1"},
{role:"readWrite",db:"testdb2"},
]
});
db.auth("root",'root');//验证是否设置成功,返回1位通过,返回0为失败
use testdb1;//切换数据库
show users;;//显示该库下所有用户
权限含义分别如下
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
可以配置一个用户对多个数据库的权限,一般配置一个就行
6.重启mongodb
sudo docker restart mongo; //docker
非docker 直接停止,然后 执行 mongo --auth
mongoose链接配置
# mongodb 为协议
# username: 连接数据库的用户
# password: 该用户的密码
# localhost: 本地的地址(因为这是本地环境)非本地环境使用数据库所在域名或者地址
# 27017: mongodb的端口号(这个一般是默认值,也可以进行修改)
# dbname: 数据库的名字
var db = 'mongodb://username:password@localhost:27017/dbname'
参考链接
https://segmentfault.com/a/1190000015603831#item-0-9
https://www.jianshu.com/p/a6b82fd5bbc1