一、keyfile认证
1创建keyfile(秘钥文件)
1.1要求
(1)通过密钥文件进行身份验证时,副本集中的每个mongo实例都使用密钥文件的内容作为与其他成员进行身份验证的共享密码。
只有拥有正确密钥文件的Mongod实例才能加入副本集。
(2)密钥文件的内容必须在6到1024个字符之间,并且对于副本集的所有成员必须是相同的。
1.2创建
您可以使用您选择的任何方法生成密钥文件。例如,以下操作用于openssl生成用于密钥文件。
主要:key的长度必须是6-1024的base64字符,unix下必须相同组权限,windows下不需要。
1.3更改权限
chmod 600 ./mongodb.key
2将密钥文件复制到每个副本集成员上
将密钥文件复制到托管副本集成员的每个服务器上。确保运行mongod实例的用户是该文件的所有者,并且可以访问密钥文件。
scp name@xx.xx.xx.xx:XXX/mongodb.key /XXX
3登录到mongs 创建用户
Use admin一定要用admin数据库
db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
4关闭分片加副本集的所有成员
5.在每个mongod的配置文件中添加以下内容:
auth=true
keyFile=XXX/mongodb.key
在每个mongos的配置文件中添加以下内容:
keyFile=XXX/mongodb.key
5.从新启动集群,启动顺序为
配置-->分片-->副本
备注:最好创建一个全局权限的账户,不然如果忘记了用户和密码就不太方便了。
二、附件
1.数据库角色
针对Mongodb数据库中的各种角色进行说明
数据库访问
角色名称 | 拥有权限 |
read | 允许读取指定数据库的角色 |
readWrite | 允许读写指定数据库的角色 |
数据库管理
角色名称 | 拥有权限 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许管理当前数据库的用户,如创建用户、为用户授权 |
dbOwner | 数据库拥有者(最高),集合了dbAdmin/userAdmin/readWrite角色权限 |
集群管理
角色名称 | 拥有权限 |
clusterAdmin | 集群最高管理员,集合clusterManager/clusterMonitor/hostManager角色权限 |
clusterManager | 集群管理角色,允许对分片和副本集集群执行管理操作,如addShard,resync等 |
clusterMonitor | 集群监控角色,允许对分片和副本集集群进行监控,如查看serverStatus |
hostManager | 节点管理角色,允许监控和管理节点,比如killOp、shutdown操作 |
备份恢复
角色名称 | 拥有权限 |
backup | 备份权限,允许执行mongodump操作 |
restore | 恢复权限,允许执行mongoresotre操作 |
数据库通用角色
角色名称 | 拥有权限 |
readAnyDatabase | 允许读取所有数据库 |
readWriteAnyDatabase | 允许读写所有数据库 |
userAdminAnyDatabase | 允许管理所有数据库的用户 |
dbAdminAnyDatabase | 允许管理所有数据库 |
特殊角色
角色名称 | 拥有权限 |
root | 超级管理员,拥有所有权限 |
__system | 内部角色,用于集群间节点通讯 |
2.用户管理
添加用户
通过mongo shell终端操作,用户保存在admin数据库system.user集合中
添加普通用户
切换到需要添加用户的db
use xxxx
执行添加
db.createUser( { user:"username", pwd:"password", roles:[ {role:"read", db:"xxxx"}, {role:"readWrite", db:"test"} ] } ) |
添加超级用户
切换到admin数据库
use admin
执行添加
db.createUser( { user:"username", pwd:"password", roles:[ {role:"root", db:"admin"} ] } ) |
删除用户
切换到用户授权的db
use xx
执行删除操作
db.dropUser("username")
更新用户
切换到用户授权的db
use xx
执行更新
字段会覆盖原来的内容
db.updateUser("username",{ pwd:"new password", customData:{ "title":"PHP developer" } }) |
更新用户密码
use xx
db.changeUserPassword("username","newpassword")
查看用户信息
use admin
db.getUser("username")
删除用户
切换到用户授权的db
use xx
执行删除操作
db.dropUser("username")
参考资料:
1. https://www.cnblogs.com/wadeyu/p/7928625.html
2. http://www.btfw.org/linux/487.html
3. http://www.jb51.net/article/126447.htm