mongodb副本集用户权限设置
mongodb副本集用户权限设置
一:先看看MongoDB中用户的角色说明
read : 数据库的只读权限,包括:
aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats,count,dataSize,dbHash,dbStats,distinct,filemd5,mapReduce (inline output only.),text (beta feature.)geoNear,geoSearch,geoWalk,group
readWrite 数据库的读写权限,包括:
cloneCollection (as the target database.),convertToCapped,create (and to create collections implicitly.),renameCollection (within the same database.)findAndModify,mapReduce (output to a collection.) drop(),dropIndexes,emptycapped,ensureIndex()
和read的所有权限
dbAdmin:
clean,collMod,collStats,compact,convertToCappe create,db.createCollection(),dbStats,drop(),dropIndexes ensureIndex(),indexStats,profile,reIndex renameCollection (within a single database.),validate
userAdmin角色: 数据库的用户管理权限
clusterAdmin角色:
集群管理权限(副本集、分片、主从等相关管理),包括:
addShard,closeAllDatabases,connPoolStats,connPoolSync,_cpuProfilerStart_cpuProfilerStop,cursorInfo,diagLogging,dropDatabase
shardingState,shutdown,splitChunk,splitVector,split,top,touchresync
serverStatus,setParameter,setShardVersion,shardCollection
replSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFrom
repairDatabase,replSetFreeze,replSetGetStatus,replSetInitiate
logRotate,moveChunk,movePrimary,netstat,removeShard,unsetSharding
hostInfo,db.currentOp(),db.killOp(),listDatabases,listShardsgetCmdLineOpts,getLog,getParameter,getShardMap,getShardVersion
enableSharding,flushRouterConfig,fsync,db.fsyncUnlock()
readAnyDatabase:任何数据库的只读权限(和read相似)
readWriteAnyDatabase:任何数据库的读写权限(和readWrite相似)
userAdminAnyDatabase:任何数据库用户的管理权限(和userAdmin相似)
dbAdminAnyDatabase:任何数据库的管理权限(dbAdmin相似)
__system: 什么权限都有
创建用户,需要指定用户角色roles
roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
具体角色:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
二:配置步骤(一般刚配置的conf是没有auth认证的,我的已经配置完成,需要先屏蔽)
1.先注释conf文件
主节点mongo.conf文件先注释auth,key等文件

从节点1,2先注释auth,keyFile,关闭认证:
2: 创建用户
现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)。
在主节点服务器上,启动mongo
> use admin
switched to db admin
> db.createUser(
... {
... user: "root",
... pwd: "shgbit",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
在admin库创建了一个高权限的用户root,然后切换到replSetTest数据库,创建一个可读写数据库权限的用户shgbit。
> use replSetTest
switched to db replSetTest
> db.createUser(
... {
... user: "shgbit",
... pwd: "shgbit",
... roles: [ { role: "readWrite", db: "replSetTest" } ]
... }
... )
Successfully added user: {
"user" : "shgbit",
"roles" : [
{
"role" : "readWrite",
"db" : "replSetTest"
}
]
}
3:创建keyFile文件
keyFile文件的作用: 集群之间的安全认证,增加安全认证机制KeyFile(开启keyfile认证就默认开启了auth认证了,为了保证后面可以登录,我已创建了用户)
(1):openssl rand -base64 666 > /root/mongodb/keyfile
其中666是文件大小 /root/mongodb/keyfile : 文件存放路径
(2):该key的权限必须是600
chmod 600 /root/mongodb/keyfile
注意:创建keyFile前,需要先停掉副本集中所有主从节点的mongod服务(systemctl stop mongodb.service),然后再创建,否则有可能出现服务启动不了的情况。
mongodb集群有自动切换主库功能,如果先关主库,主库就切换到其它上面去了,这里预防主库变更,从库关闭后再关闭主库
(3):将主节点中的keyfile文件拷贝到副本集其他从节点服务器中,路径地址对应mongo.conf配置文件中的keyFile字段地址。并设置keyfile权限为600
4:更新配置mongo.conf
配置好所有节点的keyFile文件后,打开主节点的mongo.conf配置,取消注释:auth,keyFile,oplogSize;从节点取消keyFile,oplogSize的注释即可,从节点不需要启用auth,然后重新启动所有节点服务(systemctrl start mongodb.service)
启动mongo默认连接到test,每次都需要使用db.auth('root','shgbit')进行用户认证才能操作数据库

因为:root账号只赋予了userAdminAnyDatabase权限,在操作rs.config(),rs.status()时,提示没有权限操作:
Error: Could not retrieve replica set config: {
"ok" : ,
"errmsg" : "not authorized on admin to execute command { replSetGetConfig: 1.0 }",
"code" :
}
需要重新赋予副本集的操作权限:
db.grantRolesToUser( "root" , [ { role: "dbOwner", db: "admin" },{ "role": "clusterAdmin", "db": "admin" },
{ "role": "userAdminAnyDatabase", "db": "admin" },
{ "role": "dbAdminAnyDatabase", "db": "admin" },
{ role: "root", db: "admin" } ])
加上以上权限后,就可以操作副本集命令,dbOwner可以直接操作其他数据库如replSetTest,不需要重新认证 db.auth('shgbit','shgbit')
其他操作:
删除用户
删除replSetTest库下面的admin用户
> use replSetTest
> db.dropUser('admin')
>use admin
switched to db admin
testrepl:PRIMARY> db.system.users.find() 查看所有用户
mongodb副本集用户权限设置的更多相关文章
- linux上安装MongoDB副本集(带keyfile安全认证以及用户权限)
搭建前准备 MongoDB版本:4.0 主要参考搭建MongoDB副本集网站:https://www.jianshu.com/p/f021f1f3c60b 安装之前最好先确定一下几点: 防火墙关闭 M ...
- MongoDB 副本集的用户和权限一般操作步骤
步骤总结: 在主节点上添加超管用户,副本集会自动同步 按照仲裁者.副本节点.主节点的先后顺序关闭所有节点服务 创建副本集认证的key文件,复制到每个服务所在目录 修改每个服务的配置文件,增加参数 启动 ...
- mongodb副本集(选举,节点设置,读写分离设置)
1.相对于传统主从模式的优势 传统的主从模式,需要手工指定集群中的Master.如果Master发生故障,一般都是人工介入,指定新的Master.这个过程对于应用一般不是透明的,往往伴随着应用重新修改 ...
- mongodb副本集优先级设置
在设置mongodb副本集时,Primary节点.second节点,仲裁节点,有可能资源配置(CPU或者内存)不均衡,所以要求某些节点不能成为Primary我们知道mongodb的设置: 除了仲裁节 ...
- 创建mongodb副本集操作实例
一:概念 相关概念及图片引用自这里 mongodb副本集: 副本集是一组服务器,其中一个是主服务器,用于处理客户请求:还有多个备份服务器,用于保存主服务器的数据副本.如果主服务器崩溃了,备份服务器自动 ...
- mongodb副本集原理及部署记录
工作原理 1.副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作 2.oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为 ...
- NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署
NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...
- MongoDB副本集(一主一备+仲裁)环境部署-运维操作记录
MongoDB复制集是一个带有故障转移的主从集群.是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复.MongoDB复制集模式中没有固定的主结点,在启动后,多个服务节点间将自动选举产生一 ...
- mongodb副本集加分片集群安全认证使用账号密码登录
mongodb副本集加分片集群搭建网上资料有很多.粘贴一个写的比较好的.副本集加分片搭建 对于搭建好的mongodb副本集加分片集群,为了安全,启动安全认证,使用账号密码登录. 默认的mongodb是 ...
随机推荐
- IIS7.5 错误代码0x8007007e HTTP 错误 500.19 - Internal Server Error
今天在win2008+IIS7.5的环境中部署WCF服务后,一直出现无法打开的页面.具体错误信息如下: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面 ...
- 什么是 MIME TYPE?
文章来源: http://baike.baidu.com/item/MIME https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_H ...
- 使用ajax无法跨源问题总结
参考文章: 浏览器同源政策及其规避方法 跨域资源共享 CORS 详解 使用jQuery实现跨域提交表单数据 <form action="http://v.juhe.cn/weather ...
- 1. dubbo概述
dubbo简介: 官网:http://dubbo.io 最大程度进行解耦,降低系统耦合性,可以跨工程,跨项目; 生产者/消费者模式; jdk:1.6以上 maven:3.0以上 国际maven仓库:h ...
- 设计模式(八)Proxy Parttern 代理模式
核心作用: 通过代理,控制对对象的访问 可以详细控制某个对象的方法,在调用这个方法做前置处理,调用这个方法后做后置处理(AOP的微观实现) AOP(Aspect Oriented Programmin ...
- PostgreSQL安装及使用教程一(exe安装方式)
下载安装 百度搜索PostgreSQL,进入官网,选择相应版本的图形化安装程序(BigSQL)安装即可 连接数据库 对数据库操作有两种方式,一种是通过命令行工具psql,另一种是通过图形化界面pgAd ...
- 优雅地记录Python程序日志1:logging模块简介
本文摘自:https://zhuanlan.zhihu.com/p/31893724 本篇涉及: logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 前言 在使 ...
- C# DataTable 通过Linq分组
datatable我们是经常使用到的,但是需要对数据进行分组,具体代码如下: var result = dt.AsEnumerable().GroupBy(f => new { type = f ...
- centos7: 将nginx,php-fpm加入开机启动
1. 自己新建一个脚本,如centnet-service.sh 经过后面的几个步骤后,这个脚本在开机的时候会执行,在这个脚本里面可以写你开机的时候想执行的命令,如启动nginx,phpf-pm等服务 ...
- change color3
两种方法 第一种 DataGridview1.Rows[i].DefultCellStyle.backcolor 第二种 AlternatingRowsDefutCellstyle 属性 获取或设置应 ...