Mycat安全设置_mycat 权限(2)

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

🔥 Mycat实现分库分表:点我学习

🔥 Mycat实现单库水平分表、按月分表:点我学习

🔥 Mycat高可用方案-HAProxy+Keepalived:点我学习

目录

一、🚩权限配置

1.1、user标签权限控制

目前 Mycat 对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑库级别的读写权限控制。是通过 server.xmluser 标签进行配置。

server.xmluser部分标签例子:

<user name="mycat" 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>

配置说明

  • name :应用连接中间件逻辑库的用户名
  • password:该用户名对应的密码
  • schemas:应用当前连接的逻辑库中所对应的逻辑表。可以配置一个或多个,多个使用,分开
  • readOnly:是否只读
测试案例
案例一

使用user用户,权限为只读,即readOnly: true。验证是否可以查询和写入数据。

  • 使用user用户登录,运行命令如下
mysql -uuser -puser -h 192.168.110.145 -P8066

  • 切换到TESTDB数据库
use TESTDB;

  • 查询orders数据
mysql> select \* from orders;
+--------+------------+-------------+-----------+
| id     | order_type | customer_id | amount    |
+--------+------------+-------------+-----------+
|      1 |        101 |         100 | 100100.00 |
|      2 |        101 |         100 | 100300.00 |
|      6 |        102 |         100 | 100020.00 |
|      3 |        101 |         101 | 120000.00 |
|      4 |        101 |         101 | 103000.00 |
|      5 |        102 |         101 | 100400.00 |
| 400100 |        102 |         101 |   1000.00 |
| 400101 |        102 |         101 |   1000.00 |
| 400200 |        102 |         101 |   1000.00 |
| 400201 |        102 |         101 |   1000.00 |
+--------+------------+-------------+-----------+
10 rows in set (0.09 sec)

  • 执行插入数据SQL
insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);

  • 可以看到运行结果,插入失败,用户只有只读权限,如下:
mysql> insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);
ERROR 1495 (HY000): User readonly

案例二

使用mycat用户,权限为可读可写,即readOnly: false。验证是否可以查询和写入数据。

  • 使用mycat用户登录,运行命令如下
mysql -umycat -p123456 -h 192.168.110.145 -P8066

  • 切换到TESTDB数据库
use TESTDB;

  • 查询orders数据
mysql> select \* from orders;
+--------+------------+-------------+-----------+
| id     | order_type | customer_id | amount    |
+--------+------------+-------------+-----------+
|      1 |        101 |         100 | 100100.00 |
|      2 |        101 |         100 | 100300.00 |
|      6 |        102 |         100 | 100020.00 |
|      3 |        101 |         101 | 120000.00 |
|      4 |        101 |         101 | 103000.00 |
|      5 |        102 |         101 | 100400.00 |
| 400100 |        102 |         101 |   1000.00 |
| 400101 |        102 |         101 |   1000.00 |
| 400200 |        102 |         101 |   1000.00 |
| 400201 |        102 |         101 |   1000.00 |
+--------+------------+-------------+-----------+
10 rows in set (0.01 sec)

  • 执行插入数据SQL
insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);

  • 可看到运行结果,插入成功,如下:
mysql> insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);
Query OK, 1 row affected (0.02 sec)

1.2、privileges 标签权限控制

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

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

由于 Mycat 一个用户的 schemas 属性可配置多个逻辑库(schema) ,所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制。

server.xmlprivileges部分标签,进行配置orders表没有增删改查权限

<user name="mycat" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
		<property name="defaultSchema">TESTDB</property>
		<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

        <!-- 表级 DML 权限设置 -->
        <privileges check="true">
                <schema name="TESTDB" dml="1111" >
                        <table name="orders" dml="0000"></table>
                        <!-- <table name="tb02" dml="1111"></table> -->
                </schema>
        </privileges>
</user>

参数配置说明:

  • check:是否开启
  • DML权限设置配置说明如下
DML权限增加(insert)更新(update)查询(select)删除(delete)
0000
0010
1110
1111
测试案例
案例一

使用mycat用户,privileges配置orders表权限为禁止增删改查(dml="0000"),验证是否可以查询出数据,验证是否可以写入数据。

  • 重启Mycat,使用mycat用户登录,命令如下:
mysql -umycat -p123456 -h 192.168.110.145 -P8066

  • 切换到TESTDB数据库
use TESTDB;

  • 查询orders数据
select \* from orders;

  • 可以看到禁止该用户查询数据,如下:
mysql> select \* from orders;
ERROR 3012 (HY000): The statement DML privilege check is not passed, reject for user 'mycat'

  • 执行插入数据SQL,如下:
insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);

  • 可看到运行结果,禁止该用户插入数据,如下:
mysql> insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);
ERROR 3012 (HY000): The statement DML privilege check is not passed, reject for user 'mycat'

案例二

使用mycat用户,privileges配置orders表权限为可以增删改查(dml="1111"),验证是否可以查询出数据,验证是否可以写入数据。

  • 修改配置文件server.xmlnamemycatuser标签部分。内容如下:
<user name="mycat" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
		<property name="defaultSchema">TESTDB</property>
		<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

        <!-- 表级 DML 权限设置 -->
        <privileges check="true">
                <schema name="TESTDB" dml="1111" >
                        <table name="orders" dml="1111"></table>
                        <!-- <table name="tb02" dml="1111"></table> -->
                </schema>
        </privileges>
</user>

  • 重启Mycat,使用mycat用户登录,命令如下:
mysql -umycat -p123456 -h 192.168.110.145 -P8066

  • 切换到TESTDB数据库
use TESTDB;

  • 查询orders数据
select \* from orders;

  • 可以看到查询数据,如下:
mysql> select \* from orders;
+--------+------------+-------------+-----------+
| id     | order_type | customer_id | amount    |
+--------+------------+-------------+-----------+
|      1 |        101 |         100 | 100100.00 |
|      2 |        101 |         100 | 100300.00 |
|      6 |        102 |         100 | 100020.00 |
|      3 |        101 |         101 | 120000.00 |
|      4 |        101 |         101 | 103000.00 |
|      5 |        102 |         101 | 100400.00 |
|      7 |        101 |         101 |  10000.00 |
| 400100 |        102 |         101 |   1000.00 |
| 400101 |        102 |         101 |   1000.00 |
| 400200 |        102 |         101 |   1000.00 |
| 400201 |        102 |         101 |   1000.00 |
+--------+------------+-------------+-----------+
11 rows in set (0.07 sec)

  • 执行插入数据SQL,如下:
insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);

  • 可看到运行结果,插入成功,如下:
mysql> insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);
Query OK, 1 row affected (0.01 sec)

mysql> select \* from orders;
+--------+------------+-------------+-----------+
| id     | order_type | customer_id | amount    |
+--------+------------+-------------+-----------+
|      1 |        101 |         100 | 100100.00 |
|      2 |        101 |         100 | 100300.00 |
|      6 |        102 |         100 | 100020.00 |
|      3 |        101 |         101 | 120000.00 |
|      4 |        101 |         101 | 103000.00 |
|      5 |        102 |         101 | 100400.00 |
|      7 |        101 |         101 |  10000.00 |
|      8 |        101 |         101 |  10000.00 |
| 400100 |        102 |         101 |   1000.00 |
| 400101 |        102 |         101 |   1000.00 |
| 400200 |        102 |         101 |   1000.00 |
| 400201 |        102 |         101 |   1000.00 |
+--------+------------+-------------+-----------+
12 rows in set (0.00 sec)

二、🚧SQL 拦截

firewall 标签用来定义防火墙;firewallwhitehost 标签用来定义 IP 白名单 ,blacklist 用来定义SQL 黑名单。

2.1、白名单

可以通过设置白名单,实现某主机某用户可以访问 Mycat,而其他主机用户禁止访问。

设置白名单步骤如下:

  • 修改server.xml配置文件firewall标签。配置只有192.168.110.146主机可以通过mycat用户访问
<firewall>
    <whitehost>
        <host host="192.168.110.146" user="mycat"/>
    </whitehost>
</firewall>

+ `host`:`IP`白名单
+ `user`:允许访问的用户
  • 重启Mycat后,在192.168.110.146主机使用mycat用户访问,可以正常访问。如下:
# 查看IP地址


**先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7**

**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/69990f17e68fcfe3f373b62e8188b008.png)
![img](https://img-blog.csdnimg.cn/img_convert/875eec6ca871a5309e9d61f266e5ff16.png)
![img](https://img-blog.csdnimg.cn/img_convert/4f93b95d077c9504da19468c1fffacf3.png)
![img](https://img-blog.csdnimg.cn/img_convert/962cb6142ddef9409193bfee8ddeb52c.png)
![img](https://img-blog.csdnimg.cn/img_convert/dcc71f1cd8b767175d3cde7d54d4f640.png)
![img](https://img-blog.csdnimg.cn/img_convert/fa8b695a0dd518ff46e4e740e1f8871f.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!**

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

)]
[外链图片转存中...(img-Iodm5kUR-1715882457753)]
[外链图片转存中...(img-G2qh2pld-1715882457754)]
[外链图片转存中...(img-IilZGCsc-1715882457754)]
[外链图片转存中...(img-fO1WuUlw-1715882457755)]
[外链图片转存中...(img-ovqwt0mO-1715882457755)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!**

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值