1.拉取mongo镜像
docker pull mongo
2.运行mongo容器
docker run -itd --name mongo --privileged=true -p 27017:27017 -v /home/mongo/27017/db:/data/db mongo --auth
/home/mongo/27017/db: 数据持久化存储路径
--auth开启权限认证
注:当mongo启用auth选项时,用户需要创建数据库帐号,访问时根据帐号信息来鉴权,而数据库帐号信息就存储在admin数据库下
3.进入容器
docker exec -it mongo bash
4.设置权限
1)登录
mongo admin
2) 切换到admin数据库
use admin
3) 创建超级用户
db.createUser({user:"root",pwd:"root",roles:[{role: 'root', db: 'admin'}]})
4) 创建管理员用户
a) 退出
exit
b) 使用root用户登录
mongo -uroot -proot
c) 切换到admin数据库
use admin
d) 创建管理员用户
db.createUser({user:"admin",pwd:"admin",roles:[{role: 'userAdminAnyDatabase', db: 'admin'}]})
5) 创建数据库权限用户
use test
db.createUser({user:"test",pwd:"test",roles:[{role: 'readWrite', db: 'test'}]})
注:MongoDB 目前内置了 7 个角色。
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色: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数据库中可用。超级账号,超级权限
如果觉得使用命令操作麻烦,建议使用Studio 3T客户端工具操作,很方便,而且还支持sql语法查询数据。
工具下载地址:Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo)
备份:docker exec mongo sh -c 'mongodump -uadmin -padmin -d admin --archive' > /data/mongo/backup/mongo_`date +%F`.gz
还原:docker exec -i mongo sh -c 'mongorestore -uadmin -padmin --archive' < /data/mongo/backup/mongo_2022-05-23.gz