6、安全认证
默认情况下,MongoDb实例启动运行时是没有启用用户访问权限控制的。
-
启用访问权限控制
MongoDB实例启动时使用选项–auth 或在指定启动配置文件中添加选项auth=true
mongod.conf中:
security:
authorization: enabled
开启权限控制后,登录后要先验证:
db.auth('用户名','密码')
角色 | 权限 |
---|---|
read | 读取指定数据库中任何数据 |
readWrite | 读写指定数据库中任何数据 |
readAnyDatabase | 读取任意数据库中任何数据(除了数据块config和local之外) |
readeWriteAnyDatabase | 读写任意数据库中任何数据(除了数据块config和local之外) |
userAdminAnyDatabase | 可以在指定数据库创建和修改用户(除了数据块config和local之外) |
dbAdminAnyDatabase | 可以读取任何数据库以及对数据块进行清理、修改、压缩、获取统计信息、执行检查等操作(除了数据块config和local之外) |
dbAdmin | 可以读取任何数据库以及对数据块进行清理、修改、压缩、获取统计信息、执行检查等操 |
userAdmin | 可以在指定数据库创建和修改用户 |
clusterAdmin | 可以对整个集群或数据库系统进行管理操作 |
backup | 备份数据最小的权限 |
restore | 从备份文件中还原,恢复数据(除了system.profile)的权限 |
root | 超级权限 |
db.createUser({user:"myroot",pwd:"123456",roles:["root"]})
// 创建普通用户并指定数据库
db.createUser({user:"myroot",pwd:"123456",roles:[{role:"readeWrite", db:"tangyedb"}]})
// 查看已经创建了的用户的情况:
db.system.users.find()
// 删除用户
db.dropUser("myroot")
// 修改密码
db.changeUserPassword("myroot","1234567")
6.1、副本集安全认证
副本集中,主节点、从节点、仲裁节点之间是通过Key来认证的,每个节点上都有一个Key文件且文件都一致在主节点中创建的用户,会同步到从节点,从节点中无需重复创建
6.1.1 创建副本集认证的key文件
// base64加密方式, 生成90位长度
openssl rand -base64 90 -out ./mongo.keyfile
// 将权限改为只对当前用户可读(这一步可以不要)
chmod 400 ./mongo.keyfile
提示: 所有副本集节点必须使用同一份keyfile,最好先在宿主机上生成,然后拷贝到docker容器中,且文件必须有读的权限
然后SFTP到容器中,自己定义的目录下
修改mongod.conf文件:
security:
keyFile:/mongodb/replicaSets/mongo.keyfile
authorization:enabled
6.2、分片集群安全认证
上面分片集群架构图中的每一个节点上都需要一个keyfile