MongoDb分片集群认证

本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), MongoDb分片集群认证几个主要流程

1.在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongod和mongos实例使用内容相同的keyFile文件
(1)在其中一台机器上生成keyfile

1openssl rand -base64 753 > keyfile 2sudo chmod 400 keyfile

(2)将keyfile放置在<path-to-keyfilie>路径

2.建立管理员账号,赋所有权限(admin和config数据库)

1use admin 2db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有权限 3db.auth("admin","123456") 4 5use config 6db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有权限 7db.auth("admin","123456")

3.关闭所有mongod、mongos、configsvr,编辑配置文件,重新启动每台服务器每个实例

为每一个mongod、mongos、配置服务器的实例其中的配置文件添加认证属性或者在启动实例时添加--authorization、--keyFile选项

1[mongo@mongo3 ~]$ vi services/configsvr/mongod.conf 2 3#mongod.conf 添加以下配置 4security: 5 authorization: enabled #若启动实例报错,可删除该行 6 keyFile: /home/mongo/services/keyfile 7 8[mongo@mongo3 ~]$ ./mongod -f services/configsvr/mongod.conf

其他实例如下

1[mongo@mongo3 ~]$ vi services/shard1/mongod.conf 2 3#mongod.conf 添加以下配置 4security: 5 authorization: enabled #若启动实例报错,可删除该行 6 keyFile: /home/mongo/services/keyfile 7 8[mongo@mongo3 ~]$ ./mongod -f services/shard1/mongod.conf 9 10[mongo@mongo1 ~]$ vi services/shard2/mongod.conf 11 12#mongod.conf 添加以下配置 13security: 14 authorization: enabled #若启动实例报错,可删除该行 15 keyFile: /home/mongo/services/keyfile 16 17[mongo@mongo1 ~]$ ./mongod -f services/shard2/mongod.conf 18 19[mongo@mongo1 ~]$ vi services/shard3/mongod.conf 20 21#mongod.conf 添加以下配置 22security: 23 authorization: enabled #若启动实例报错,可删除该行 24 keyFile: /home/mongo/services/keyfile 25 26[mongo@mongo1 ~]$ ./mongod -f services/shard3/mongod.conf 27 28[mongo@mongo2 ~]$ vi services/mongos/mongos.conf 29 30#mongod.conf 添加以下配置 31security: 32 authorization: enabled #若启动实例报错,可删除该行 33 keyFile: /home/mongo/services/keyfile 34 35[mongo@mongo2 ~]$ ./mongos -f services/mongos/mongos.conf

4.admin连接mongo集群

[mongo@mongo3 ~]$ ./mongo 172.16.0.192:27017/admin -u admin -p 123456

5.为指定数据库添加访问用户,本文为testShard数据库

1use testShard 2db.createUser( 3 { 4 user:"test", 5 pwd:"test", 6 roles:[ 7 {role:"readWrite", db:"testShard"} #读写权限 8 ] 9 } 10) 11db.auth("test","test")

6.test访问mongo集群,只有testShard的数据读写权限

1[mongo@mongo3 ~]$ ./mongo 172.16.0.192:27017/testShard -u test -p test 2MongoDB shell version v4.0.3 3connecting to: mongodb://172.16.0.192:27017/testShard 4Implicit session: session { "id" : UUID("e0f8bf3f-83d7-432c-ba4c-c063d865380e") } 5MongoDB server version: 4.0.3

用户和角色方法
详细参见官方文档:
https://docs.mongodb.com/manual/reference/method/#role-management

查看角色信息
use admin
db.getRole("rolename",{showPrivileges:true})

删除角色
use admin
db.dropRole("rolename")

系统内置用户角色
大部分内置的角色对所有数据库共用,少部分仅对admin生效

数据库用户类

read
非系统集合有查询权限

readWrite
非系统集合有查询和修改权限

数据库管理类

dbAdmin
数据库管理相关,比如索引管理,schema管理,统计收集等,不包括用户和角色管理

dbOwner
提供数据库管理,读写权限,用户和角色管理相关功能

userAdmin
提供数据库用户和角色管理相关功能

集群管理类

clusterAdmin
提供最大集群管理权限

clusterManager
提供集群管理和监控权限

clusterMonitor
提供对监控工具只读权限

hostManager
提供监控和管理severs权限

备份和恢复类

backup
提供数据库备份权限
restore
提供数据恢复权限

All-Database类

readAnyDatabase
提供读取所有数据库的权限除了local和config数据库之外

readWriteAnyDatabase
和readAnyDatabase一样,除了增加了写权限

userAdminAnyDatabase
管理用户所有数据库权限,单个数据库权限和userAdmin角色一样

dbAdminAnyDatabase
提供所有用户管理权限,除了local,config

超级用户类

root
数据库所有权限

内部角色

__system
提供数据库所有对象任何操作的权限,不能分配给用户,非常危险

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )