1. Mycat相关文章

  Linux安装Mycat1.6.7.4并实现Mysql数据库读写分离简单配置

  Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

  Docker部署Mysql8.0.20并配置主从复制

  Mycat配置分库分表(垂直分库、水平分表)、全局序列

2. 环境准备

  • 服务器划分
服务器IP 备注
192.168.133.130 数据库-1
192.168.133.131 数据库-2
192.168.133.132 Mycat
  • 表结构

      数据库和表依据博客:Mycat配置分库分表(垂直分库、水平分表)、全局序列环境。其中,Mycat连接两个Mysql数据库education的逻辑库为TESTDB,Mysql-1中表为mycat_sequence(Mycat全局序列表)、t_schedule(课程表)、t_subject_dict(课程字典表)等,Mysql-2中表为t_student(学生表)、t_schedule(课程表)、t_subject_dict(课程字典表)。

3. 权限配置

  • user标签权限控制

      在server.xml中,进行用户级别的权限设置:
# server.xml中用户设置
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>

  属性说明如下:

标签属性 说明
user > name 连接逻辑库用户名
password 连接逻辑库密码
schemas 逻辑库名称:TESTDB
defaultSchema 默认逻辑库
readOnly 该用户是否只读,默认:false

  测试:

# 启动Mycat
# 进入Mycat的bin目录
./mycat cosole # 测试1:user用户(只读) # 连接Mycat
mysql -uuser -puser -h192.168.133.132 -P8066 # 切换数据库
use TESTDB; # 查询数据(查询成功)
select * from t_schedule; # 插入数据
# 插入失败,提示:User readonly
insert into t_student(id, username) values(1, '张三'); # 测试2:root用户(可读可写)
# 连接Mycat
mysql -uroot -p123456 -h192.168.133.132 -P8066 # 切换数据库
use TESTDB; # 查询数据(查询成功)
select * from t_schedule; # 插入数据(插入成功)
insert into t_student(id, username) values(1, '张三'); # 查询插入的数据
select * from t_student;
  • privileges标签权限控制

      在user标签下的privileges标签可以对逻辑库(schema)、表(table)进行更加精确的DML权限控制。

      privileges标签的check属性为true则开启权限检查,为false则不开启权限检查,默认为false。

      由于Mycat一个用户的schemas属性可配置多个逻辑库(schema),所以privileges标签的下级节点schema同样可配置多个,同时对多库多表进行精确的DML权限控制。
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<privileges check="true">
<schema name="TESTDB" dml="1111" >
<table name="t_student" dml="0000"></table>
<table name="t_schedule" dml="1111"></table>
<table name="t_subject_dict" dml="0010"></table>
</schema>
</privileges>
</user>

  DML权限说明如下:

DML权限 新增 更新 查询 删除
0000 禁止 禁止 禁止 禁止
0010 禁止 禁止 允许 禁止
1110 允许 允许 允许 禁止
1111 允许 允许 允许 允许
... ... ... ... ...

  测试:

# 启动Mycat
# 进入Mycat的bin目录
./mycat cosole # 连接Mycat
mysql -uroot -p123456 -h192.168.133.132 -P8066 # 测试表t_student(0000)
# 查询报错:3012 - The statement DML privilege check is not passed, reject for user 'root'
select * from t_student; # 新增报错:3012 - The statement DML privilege check is not passed, reject for user 'root'
insert into t_student(id, username) values(4 , '李四'); # 测试表t_schedule(1111)
# 查询正常:OK
select * from t_schedule; # 更新正常:Affected rows: 1
update t_schedule set subject_code = 'SW' where id = 1; # 其他权限请自行测试

4. SQL拦截

  Mycat的server.xml配置文件中的firewall标签用来定义防火墙,其中firewall标签下的whitehost 标签用来定义IP白名单,firewall标签下的blacklist标签用来定义SQL黑名单。

  • 白名单

      通过白名单可以指定某个或某些主机可以访问Mycat,其他主机禁止访问。

      白名单可以使用通配符%*,这些配置情况下对于127.0.0.1都能以root账户登录。
# 例如
<host host="127.0.0.*" user="root"/>
<host host="127.0.*" user="root
<host host="127.*" user="root"/>
<host host="1*7.*" user="root"/>

  配置指定IP访问:

<firewall>
<whitehost>
<host host="192.168.133.130" user="root"/>
</whitehost>
</firewall>

  测试:

# 启动Mycat
# 进入Mycat的bin目录
./mycat cosole # 其他主机连接Mycat
# root用户
# 连接失败:Access denied for user 'root' with host '192.168.133.131'
mysql -uroot -p123456 -h192.168.133.132 -P8066 # user用户
# 连接成功
mysql -uuer -puser -h192.168.133.132 -P8066
  • 黑名单

      通过黑名单,可以实现对SQL操作(例如增删改查等)的拦截。

      server.xml配置文件下的firewall标签下的blacklist标签用来定义SQL黑名单,它的check属性标识是否开启权限拦截,true为开启,false为不开启,默认为false。

      配置黑名单并开启权限检查:
<firewall>
<whitehost>
<host host="192.168.133.130" user="root"/>
</whitehost>
<blacklist check="true">
<property name="deleteAllow">false</property>
</blacklist>
</firewall>

  黑名单SQL拦截配置属性说明:

配置项 默认值 说明
selelctAllow true 是否允许执行SELECT语句
deleteAllow true 是否允许执行DELETE语句
updateAllow true 是否允许执行UPDATE语句
insertAllow true 是否允许执行INSERT语句
createTableAllow true 是否允许创建表
setAllow true 是否允许使用SET语法
alterTableAllow true 是否允许执行Alter Table语句
dropTableAllow true 是否允许修改表
commitAllow true 是否允许执行commit操作
rollbackAllow true 是否允许执行roll back操作

  测试:

# 启动Mycat
# 进入Mycat的bin目录
./mycat cosole # 连接Mycat
mysql -uroot -p123456 -h192.168.133.132 -P8066 # 测试删除
# 删除失败:3012 - The statement is unsafe SQL, reject for user 'root'
delete from t_schedule where id = '123456';

Mycat安全配置的更多相关文章

  1. Mycat 中间件配置初探与入门操作

    Mycat中间件配置初探与入门操作 By:授客 QQ:1033553122 实践环境 Mycat-server-1.5.1-RELEASE-20161130213509-win.tar.gz 下载地址 ...

  2. Mycat入门配置_读写分离配置

    1.Mycat的分片 两台数据库服务器: 192.168.80.11 192.168.80.4 操作系统版本环境:centos6.5 数据库版本:5.6 mycat版本:1.4 release 数据库 ...

  3. linux中mycat的配置,分片,以及主从复制

    1.1    安装环境 1.jdk:要求jdk必须是1.7及以上版本 2.Mysql:推荐mysql是5.5以上版本 1.2  安装步骤 Mycat有windows.linux多种版本.本教程为lin ...

  4. Mycat 安装配置

    下载https://github.com/MyCATApache/Mycat-download Mycat 需要jdk 环境,首先安装 jdk 安装完 jdk 环境以后 下载 mycat server ...

  5. 基于HA机制的MyCat架构——配置HAProxy

    HAProxy简介HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站 ...

  6. MyCat安装配置

    Mycat : 数据库分库分表中间件 http://www.mycat.io/ mycat运行需要JVM,所以先安装java环境,JDK1.7以上.数据库采用mysql5.7,或者8.0 下载 下载地 ...

  7. MyCAT+MySQL 搭建高可用企业级数据库集群——第3章 MyCat核心配置讲解

    3-1 章节综述 3-2 常用配置文件间的关系 3-3 server.xml配置详解 3-4 log4j2.xml配置文件 3-5 rule.xml 3-6 常用分片算法(上) 3-7 常用分片算法( ...

  8. mycat的配置和学习

    1.mycat一共三个配置文件. 1)server.xml:配置逻辑库的名称访问的账号密码 <user name="root"> <property name=& ...

  9. MySQL主从复制之Mycat简单配置和高可用

    什么是Mycat 1.Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等.因此,Mycat本身并不存储 ...

  10. Mycat简单配置

    最近项目中需要用到Mycat来作为Mysql的分表中间件.所以稍微研究了一下. Mycat使用起来是非常方便,而且最重要的是配置简单,稍显麻烦的就是需要对库中的每一个表都进行配置. 记录一下最重要的几 ...

随机推荐

  1. JUC锁种类总结

    在并发编程中有各种各样的锁,有的锁对象一个就身兼多种锁身份,所以初学者常常对这些锁造成混淆,所以这里来总结一下这些锁的特点和实现. 乐观锁.悲观锁 悲观锁 悲观锁是最常见的锁,我们常说的加锁指的也就是 ...

  2. bWAPP----Server-Side Includes (SSI) Injection

    Server-Side Includes (SSI) Injection 什么是SSI和SSI注入 SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思.从技术 ...

  3. 宕机了,Redis数据丢了怎么办?

    持续原创输出,点击上方蓝字关注我 目录 前言 什么是AOF? 三种写回策略 日志文件太大怎么办? AOF重写会阻塞主线程吗? AOF的缺点 总结 什么是RDB? 给哪些数据做快照? 快照时能够修改数据 ...

  4. 给力啊!这篇Spring Bean的依赖注入方式笔记总结真的到位,没见过写的这么细的

    1. Bean的依赖注入概念 依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现.在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是 ...

  5. Java IDEA根据database以及脚本代码自动生成DO,DAO,SqlMapper文件(一)

    根据数据库代码自动生成的插件挺多的,这里主要分享两种: 1.根据database以及脚本代码自动生成 2.根据mybatis-generator-core自动生成(下一章节进行分享,包含sqlserv ...

  6. Oracle数据库由dataguard备库引起的log file sync等待

    导读: 最近数据库经常出现会话阻塞的报警,过一会又会自动消失,昨天晚上恰好发生了一次,于是赶紧进行了查看,不看不知道,一看吓一跳,发现是由dataguard引起的log file sync等待.我们知 ...

  7. pytest失败重跑

    一.说明 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例 ...

  8. selenium+python自动化元素定位

    最近学习自动化测试,终于初步学习完成,需要进行博客日志总结,加深巩固自己的知识. 元素的八种定位方式 1.id 以百度为例子 我们在python输入的元素定位语法:bs.find_element_by ...

  9. Goland 2020.2.x 激活码永久破解教程 (最新Goland激活码!2020.11.26亲测可用!)

    在2020.11.26 Goland的用户们又迎来了一次更新,这就导致很多软件打开时候就提示Goland激活码已经失效,码小辫第一时间给各位分享了关于最新Goland激活破解教程! goland已经更 ...

  10. 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?

    坊间传闻高手都喜欢用记事本写代码,那么问题来了,我们以C语言为例,如何用记事本编译运行呢?其实最简单的方式就是安装GCC编译器,在记事本编写C语言程序,然后再在命令行用GCC编译运行,下面我简单介绍一 ...