Mycat安全配置

本文详细介绍了如何在Linux上安装Mycat 1.6.7.4,配置数据库读写分离,包括一主一从和双主双从模式。还涉及Mycat与Mysql的表结构设置,以及user和privileges标签权限控制,包括只读用户和精确DML权限。此外,讲解了SQL拦截和防火墙策略,如白名单和黑名单的配置。
摘要由CSDN通过智能技术生成
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.132Mycat
  • 表结构
      数据库和表依据博客: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拦截配置属性说明:

配置项默认值说明
selelctAllowtrue是否允许执行SELECT语句
deleteAllowtrue是否允许执行DELETE语句
updateAllowtrue是否允许执行UPDATE语句
insertAllowtrue是否允许执行INSERT语句
createTableAllowtrue是否允许创建表
setAllowtrue是否允许使用SET语法
alterTableAllowtrue是否允许执行Alter Table语句
dropTableAllowtrue是否允许修改表
commitAllowtrue是否允许执行commit操作
rollbackAllowtrue是否允许执行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';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值