Mongodb ReplicatSet 认证(KeyFile)
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB的安全设置(特别是集群安全)一直是比较恼人的。那今天这篇文章就是来和大家聊聊使用Key File的ReplicatSet + User Role认证。
1. 下载MongoDB并创建数据文件夹
MongoDB的下载可以直接通过镜像源或者是去官网下载安装包的方式,这里就不再赘述了。默认大家都会下载和安装。
1 | # 配置文件夹 |
2. 生成KeyFIle
随机生成keyFile或者手动写入,key的长度必须是6-1024的base64字符,unix下必须相同组权限
1 | cd key |
- 查看内容
1 | xV7Ilo4O3+GHb57LECdoQwJ2u5DrcUsgHhzfXRrvvRVsnDaGNpp3qOvlTm1p3PjC |
- 修改key的权限
1 | # 这里的权限一定要比 600(rw) 低, 否则会报 Permission 太高的错误(在log中) |
1 | -rw------- 1 root root 1085 Jul 26 16:03 mongodb.key |
将 keyFile 分发到每一个节点(如果是物理机)
3. 配置文件
模板 mongod.conf
1 | # for documentation of all options, see: |
注意:
- 所有的机器节点都要在防火墙上开启 mongodb 需要的端口
- keyFile的路径, 以及各种参数的
大小写
- 分片集或者复制集的
每一个节点
(物理或者虚拟)都要分开配置配置文件以及keyFile
3. 启动
在每一个节点执行
1 | # 配置文件名自定(可以使用conf,yaml) |
1 | about to fork child process, waiting until server is ready for connections. |
4. 配置复制集
连接Mongo [
任意一个节点
]
1 | mongo --port 28017 |
配置:
1 | # 最好是一次性初始化 |
或者用
1 | # 添加rs节点 |
创建用户:
Notice:
- 你创建的第一个用户后,本地实例登陆失效,必须进行验证。
- 第一个用户必须创建其他用户的权限,如
userAdminAnyDatabase
,root
权限用户 - 如果至少有一个用户没有创建用户的权限,一旦本地异常关闭你可能无法创建或修改新的特权用户
创建命令:
1 | db.createUser( |
用户权限
1 | # 全局超级管理员 |
数据库 Role:
- dbAdmin
- dbOwner
数据库所有者可以对数据库执行任何管理操作。这个角色组合由授予的权限readWrite, dbAdmin和userAdmin角色 - userAdmin
提供在当前数据库上创建和修改角色和用户的功能。该角色还间接地提供 对数据库的超级用户访问,或者如果作用于admin数据库的集群。该userAdmin角色允许用户授予任何用户任何特权,包括自己。 - read
对当前数据库的读操作 - readWrite
对当前数据库的读&写操作
全局 Role:
- readAnyDatabase (全局任何数据库读)
- readWriteAnyDatabase
- userAdminAnyDatabase (全局用户管理)
- dbAdminAnyDatabase(全局数据库管理)
集群 Role:
- clusterAdmin
提供最大的集群管理访问。这个角色组合由授予的权限clusterManager, clusterMonitor和hostManager角色 - clusterManager
在集群上提供管理和监控动作。具有该角色的用户可以访问config和local数据库,其在分片和复制所使用的 - clusterMonitor
提供对监控工具(如MongoDB Cloud Manager和Ops Manager监控代理)的只读访问 。 - hostManager
提供监控和管理服务器的能力。
设置从库可读
1 | rs.slaveOk() |
设置读写方式
1 | #Primary #从主的读,默认 |
关闭服务
使用db admin关闭
1 | # 1. 登陆mongo |
通过mongod关闭
1 | mongod --shutdown --dbpath path |
通过PID关闭
1 | # 找到mongodb.pid |