增加认证
- 副本间认证
- 外部使用认证
如果是开启状态,先关闭路由,再关闭配置服务,最后关闭分片数据复本集中的每个mongod,从次节点开始。直到副本集的所 有成员都离线,包括任何仲裁者。主节点必须是最后一个成员关闭以避免潜在的回滚.最好通过 db.shutdownServer() 关闭数据库,防止后续启动时报错
//shutdown must run from localhost when running db without auth
//客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。
mongo --port 27017
//#切换到admin库
use admin
//关闭服务
db.shutdownServer()
副本间认证
(在开启认证前,需要先创建超管用户)
use admin
db.createUser({user:"myroot",pwd:"123456",roles:["root"]})
副本集和共享集群的各个节点成员之间使用内部身份验证,可以使用密钥文件或x.509证书
1.证书产生
openssl rand -base64 150 > ./mongo.keyfile
# 赋予证书读权限
chmod 400 mongo.keyfile
2.将证书复制到所有的节点上,包括配置服务和路由
复制完成后,记得修改文件权限
# 赋予证书读权限
chmod 400 mongo.keyfile
3.修改配置文件
分片数据副本集和配置服务副本集上增加的配置
vim /use/local/mongodb/configs/mongodb.conf
security:
#KeyFile鉴权文件
keyFile: /use/local/mongodb/configs/mongo.keyfile
#开启认证方式运行
authorization: enabled
路由服务上增加的配置,路由服务不需要配置security.authorization
security:
#KeyFile鉴权文件
keyFile: /use/local/mongodb/configs/mongo.keyfile
4.重启集群
cd /use/local/mongodb
# 分片数据副本集和配置服务副本集
bin/mongod -f configs/mongodb.conf
# 路由服务
bin/mongos -f configs/mongodb.conf
tip:
- 重启时可能会遇到重启失败的情况,可能是应该异常关闭分片集群导致的,可以尝试删除data/db/mongod.lock文件
- 重启分片数据存储副本集时可能会遇到启动后一直卡着,没有返回success情况,此时通过看日志如果看到其中包含有**RSM monitoring host in expedited mode until we detect a primary","attr":{"host":"#{ip:端口}","replicaSet":"#{集群配置-replication.replSetName}"}}**错误,是因为集群没有完整的启动,接着启动集群的其他功能即可解决
登录认证
通过完善副本间认证后,启动服务,即可通过密码进行登录了
未使用密码登录会报错
mongodb://路由1:端口,路由2:端口
MongoServerError: Command hostInfo requires authentication
使用密码登录即可正确登录
mongodb://myroot:123456@路由1:端口,路由2:端口
spring认证
spring:
data:
mongodb:
# uri: ${MONGODB_URI:mongodb://${账号}:${密码}@路由1:端口,路由2:端口/${连接的库}?authSource=${校验认证信息的库}}
uri: ${MONGODB_URI:mongodb://root:123456@192.168.2.18:27017,192.168.2.19:27017/db_test?authSource=admin}
查看分片信息
查看对应collection存储信息
通过直接连接mongos
# use ${目标db}
use test
db.stats()
count数可能不一致
详细字段请参看官网dbstat
mongodb角色
角色 | 权限 |
---|---|
read | 查询本库的权限 |
readWrite | 增删改查本库的权限 |
dbAdmin | 数据库对象的管理操作,但没有数据库的读写权限 |
userAdmin | 在本库下创建用户的权限 |
dbOwner | 本库所有操作的权限 |
readAnyDatabase | 查询本实例所有库的权限 |
readWriteAnyDatabase | 增删改查本实例所有库的权限 |
userAdminAnyDatabase | 在本实例所有库下创建用户的权限 |
dbAdminAnyDatabase | 本实例所有库的dbAdmin权限 |
hostManager | 数据库对象的管理操作,但没有数据库的读写权限 |
clusterMonitor | 查询集群和复制集的权限 |
clusterManager | 管理和监控集群和复制集的权限 |
clusterAdmin | 集群所有操作的权限 |
backup | 查询本实例所有库的权限 |
restore | 增删改查本实例所有库的权限 |
root | 超级用户权限 |