1.副本集
1.1在主节点创建管理员账号
/etc/mongodb/mongosh-1.8.1-linux-x64/bin/mongosh --port 27017
use admin
db.createUser({user:"用户名",pwd:"密码",roles:["root"]})
只要在主节点创建用户即可,从节点会自动同步数据
1.2创建集群密钥文件
在mongodb目录下创建
cd /etc/mongodb/mongodb
随机生成756字符的密钥
openssl rand -base64 756 > ./keyfile
1.3更改密钥文件权限
chmod 400 ./keyfile
1.4将密钥文件复制到所有节点的mongodb目录下
scp keyfile root@10.1.60.114:/etc/mongodb/mongodb
scp keyfile root@10.1.60.118:/etc/mongodb/mongodb
1.5修改所有节点的配置文件
vi conf/mongodb.conf
logappend=true
logpath=/etc/mongodb/mongodb/mongodb.log
dbpath=/etc/mongodb/mongodb/data
journal=true
fork=true
pidfilepath=/etc/mongodb/mongodb/mongodb.pid
port=27017
bind_ip=0.0.0.0
replSet=rs
#在配置文件末尾新增以下两项配置
auth=true #启用用户认证模式
keyFile=/etc/mongodb/mongodb/keyfile #集群密钥的路径
1.6重启所有节点mongodb服务
bin/mongod --config conf/mongodb.conf --shutdown
bin/mongod --config conf/mongodb.conf
1.7登录主节点验证
/etc/mongodb/mongosh-1.8.1-linux-x64/bin/mongosh --port 27017
rs.status()
可以看到执行命令后输出报错,使用创建的管理员账户登录一下在测试
在哪个库创建的用户就需要使用哪个库去验证,因为创建时只把记录写入了这个库中
use admin
db.auth("用户名","密码")
可以看到登录管理员用户后,可以使用命令正常输出信息
1.8其余权限讲解
创建所有库的读写用户(管理用户只能在admin库创建)
use admin
db.createUser({user:"用户名",pwd:"密码",roles:["readWriteAnyDatabase"]})
创建test库的读写用户(可以把用户创建到其它库,也可以统一创建到admin库)
use test
db.createUser({user:"用户名",pwd:"密码",roles:[{role:"readWrite",db:"test"}]})
创建cs库的只读用户
use cs
db.createUser({user:"用户名",pwd:"密码",roles:[{role:"read",db:"cs"}]})
还可以创建只写用户,只需把read改为write即可
注意读写用户是没有集群管理功能的,只有管理员用户有集群管理功能,即添加、删除副本集节点和查看副本集状态集群等功能
2.分片集群
2.1连接mongos服务创建管理员用户(我这里mongos服务使用20001端口)
/etc/mongodb/mongosh-1.8.1-linux-x64/bin/mongosh --port 20001
use admin
db.createUser({user:"用户名",pwd:"密码",roles:["root"]})
这里创建的用户是存到config服务节点里面的,不会存到分片里,config服务节点存储各分片的元数据还有chunk信息
2.2创建集群密钥文件
在mongodb目录下创建
cd /etc/mongodb/mongodb
随机生成756字符的密钥
openssl rand -base64 756 > ./keyfile
2.3更改密钥文件权限
chmod 400 ./keyfile
2.4将密钥文件复制到所有节点的mongodb目录下(我这里使用的是伪分片集群,一个集群里有多个mongodb服务)
scp keyfile root@10.1.60.114:/etc/mongodb/mongodb
scp keyfile root@10.1.60.118:/etc/mongodb/mongodb
2.5修改节点的配置文件
config服务和shard服务配置文件增加以下配置
#在配置文件末尾新增以下两项配置
auth=true #启用用户认证模式
keyFile=/etc/mongodb/mongodb/keyfile #集群密钥的路径
mongos服务配置文件增加以下配置
#在配置文件末尾新增以下两项配置
keyFile=/etc/mongodb/mongodb/keyfile #集群密钥的路径
2.6重启所有节点mongodb服务
这里就不举例写出来了
2.7连接mongos服务验证
这里就不举例写出来了
2.8分片集群权限配置讲解
创建普通账号的话跟副本集创建是一样的,普通账号只有读写的权利,也是没有配置集群分片和查看集群信息的能力包括创建账号
只有管理员才具有所有的权力
role角色
普通用户角色:readWrite、read、write
数据库管理员角色:dbAdminAnyDatabase、userAdminAnyDatabase、readWriteAnyDatabase、readAnyDatabase、dbAdmin、dbOwner、userAdmin、backup、restore
集群管理员角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
超级管理员角色:root
角色能力讲解
read:允许用户读取指定数据库中的数据
readWrite:允许用户读取和修改指定数据库中的数据
dbAdmin:允许用户执行指定数据库的管理操作,如创建和删除集合、索引等
dbOwner:相当于同时拥有 readWrite、dbAdmin 和 userAdmin 角色的权限,允许用户执行指定数据库的所有操作
userAdmin:允许用户管理指定数据库的用户帐户,包括创建和删除用户、设置用户权限等
clusterAdmin:允许用户执行集群范围的管理操作,如重新分片、添加和删除节点等
clusterManager:允许用户管理集群节点,如重启节点、设置节点参数等
clusterMonitor:允许用户监控集群状态和性能指标
hostManager:允许用户管理 MongoDB 实例的操作系统和网络设置
backup:允许用户备份指定数据库
restore:允许用户恢复指定数据库
readAnyDatabase:允许用户读取任意数据库中的数据
readWriteAnyDatabase:允许用户读取和修改任意数据库中的数据
userAdminAnyDatabase:允许用户管理任意数据库的用户帐户
dbAdminAnyDatabase:允许用户执行任意数据库的管理操作
root:相当于同时拥有所有其他角色的权限,允许用户执行任意操作
需要注意的是,这些角色的权限可以在数据库级别和集群级别分别分配。例如,如果将 dbAdmin
角色授予某个用户,则该用户只能管理指定数据库,而不能执行集群范围的管理操作