MongoDb分片集群认证

Stella981
• 阅读 663

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

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

openssl rand -base64 753  > keyfile
sudo chmod 400 keyfile

(2)将keyfile放置在路径

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

use admin
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有权限
db.auth("admin","123456")

use config
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有权限
db.auth("admin","123456")

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

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

[mongo@mongo3 ~]$ vi services/configsvr/mongod.conf

#mongod.conf 添加以下配置
security:
    authorization: enabled  #若启动实例报错,可删除该行
    keyFile: /home/mongo/services/keyfile

[mongo@mongo3 ~]$ ./mongod -f services/configsvr/mongod.conf

其他实例如下

[mongo@mongo3 ~]$ vi services/shard1/mongod.conf

#mongod.conf 添加以下配置
security:
    authorization: enabled  #若启动实例报错,可删除该行
    keyFile: /home/mongo/services/keyfile
    
[mongo@mongo3 ~]$ ./mongod -f services/shard1/mongod.conf

[mongo@mongo1 ~]$ vi services/shard2/mongod.conf

#mongod.conf 添加以下配置
security:
    authorization: enabled  #若启动实例报错,可删除该行
    keyFile: /home/mongo/services/keyfile
    
[mongo@mongo1 ~]$ ./mongod -f services/shard2/mongod.conf

[mongo@mongo1 ~]$ vi services/shard3/mongod.conf

#mongod.conf 添加以下配置
security:
    authorization: enabled  #若启动实例报错,可删除该行
    keyFile: /home/mongo/services/keyfile
    
[mongo@mongo1 ~]$ ./mongod -f services/shard3/mongod.conf

[mongo@mongo2 ~]$ vi services/mongos/mongos.conf

#mongod.conf 添加以下配置
security:
    authorization: enabled  #若启动实例报错,可删除该行
    keyFile: /home/mongo/services/keyfile
    
[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数据库

use testShard
db.createUser(
    {
        user:"test",
        pwd:"test",
        roles:[
            {role:"readWrite", db:"testShard"} #读写权限
        ]
    }
)
db.auth("test","test")

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

[mongo@mongo3 ~]$ ./mongo 172.16.0.192:27017/testShard -u test -p test
MongoDB shell version v4.0.3
connecting to: mongodb://172.16.0.192:27017/testShard
Implicit session: session { "id" : UUID("e0f8bf3f-83d7-432c-ba4c-c063d865380e") }
MongoDB 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
提供数据库所有对象任何操作的权限,不能分配给用户,非常危险

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Mongodb集群搭建一篇就够了
本文主要介绍mongodb集群的搭建安装过程,对于学习mongodb的同学很有帮助,包括分片模式、复制集模式、是否启用认证等,本文选取mongodb3.6.3版本为例进行详细安装说明,其他版本搭建过程和本过程一样,只需按照本文说明操作即可。1.Mongodb分片集群架构
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MongoDB 分片管理(一)检查集群状态
一、检查集群状态1.1使用sh.status()查看集群摘要信息1、使用sh.status()可以查看分片信息、数据库信息、集合信息sh.status()如果数据块较多时,使用sh.status(true)又是输出会很多,就不会截断,要使用如下查看2、tooman
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这