Mycat安全设置

这篇具有很好参考价值的文章主要介绍了Mycat安全设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍁 作者:微枫Micromaple

💒 主页:欢迎关注Micromaple

📌 简介:Java程序员、后端全栈工程师

🔗 点赞👍➕收藏⭐➕留言📝 您的支持就是我前进的动力💪💪💪

大家好,我是微枫Micromaple,下面是我的Mycat系列专栏(持续更新ing),有喜欢的小伙伴欢迎订阅学习呀

🚀 深入学习Mycat

Mycat系列专栏:点我学习

🔥 Mycat主从搭建、读写分离:点我学习

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

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

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

一、🚩权限配置

1.1、user标签权限控制

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

server.xml user部分标签例子:

<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.xml privileges部分标签,进行配置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 标签用来定义防火墙;firewall whitehost 标签用来定义 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>
    
    • hostIP白名单
    • user:允许访问的用户
  • 重启Mycat后,在192.168.110.146主机使用mycat用户访问,可以正常访问。如下:

    # 查看IP地址
    root@ubuntu-mysql-master:~# <font color="#808000;">ip addr show ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:30:ff:90 brd ff:ff:ff:ff:ff:ff
        inet 192.168.110.146/24 brd 192.168.110.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe30:ff90/64 scope link 
           valid_lft forever preferred_lft forever
    # mycat用户登录Mycat
    root@ubuntu-mysql-master:~# mysql -umycat -p123456 -h 192.168.110.145 -P8066
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 5.6.29-mycat-1.6.7.6-release-20220524173810 MyCat Server (OpenCloudDB)
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    
  • 在此主机换user用户登录,禁止访问。如下:

    # 查看IP地址
    root@ubuntu-mysql-master:~# ip addr show ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:30:ff:90 brd ff:ff:ff:ff:ff:ff
        inet 192.168.110.146/24 brd 192.168.110.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe30:ff90/64 scope link 
           valid_lft forever preferred_lft forever
    # user用户登录Mycat
    root@ubuntu-mysql-master:~# mysql -uuser -puser -h 192.168.110.145 -P8066
    mysql: [Warning] Using a password on the command line interface can be insecure.
    ERROR 1045 (HY000): Access denied for user 'user' with host '192.168.110.146'
    
  • 192.168.110.148主机使用mycat用户访问,禁止访问。如下:

    # 查看IP地址
    root@ubuntu-mysql-master2:~# ip addr show ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:c6:3f:01 brd ff:ff:ff:ff:ff:ff
        inet 192.168.110.148/24 brd 192.168.110.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fec6:3f01/64 scope link 
           valid_lft forever preferred_lft forever
    # mycat用户登录Mycat
    root@ubuntu-mysql-master2:~# mysql -umycat -p123456 -h 192.168.110.145 -P8066
    mysql: [Warning] Using a password on the command line interface can be insecure.
    ERROR 1045 (HY000): Access denied for user 'mycat' with host '192.168.110.148'
    

2.2、黑名单

可以通过设置黑名单,实现 Mycat 对具体 SQL 操作的拦截,如增删改查等操作的拦截。

设置黑名单步骤如下:

  • 修改server.xml配置文件firewall标签。配置禁止mycat用户进行删除操作。

    <firewall>
        <whitehost>
            <host host="192.168.110.146" user="mycat"/>
        </whitehost>
        <blacklist check="true">
        	<property name="deleteAllow">false</property>
        </blacklist>
    </firewall>
    
    • check:是否开启白名单
    • deleteAllow:是否允许执行DELETE语句
  • 重启Mycat后,在192.168.110.146主机使用mycat用户访问。

    mysql -umycat -p123456 -h 192.168.110.145 -P8066
    
  • 切换到TESTDB数据库

    use TESTDB;
    
  • 执行删除语句

    delete from orders where id=7;
    
  • 运行后发现禁止删除数据,如下:

    mysql> delete from orders where id=7;
    ERROR 3012 (HY000): The statement is unsafe SQL, reject for user 'mycat'
    
黑名单 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安全设置的认识清晰了不少,别忘了三连支持博主呀,我是微枫micromaple,期待你的关注💪💪💪文章来源地址https://www.toymoban.com/news/detail-814693.html

到了这里,关于Mycat安全设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mycat安全设置

    🍁 作者: 微枫 Micromaple 💒 主页: 欢迎关注Micromaple 📌 简介: Java程序员、后端全栈工程师 🔗 点赞👍➕收藏⭐➕留言📝 您的支持就是我前进的动力💪💪💪 大家好,我是微枫 Micromaple ,下面是我的 Mycat 系列专栏(持续更新ing),有喜欢的小伙伴欢迎订阅学习呀 🚀 深入学

    2024年01月22日
    浏览(19)
  • mycat设置sql隔离级别的问题

    General log中出现大量SQL “SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”。 该语句会引起两个问题, 1: \\\"REPEATABLE READ\\\"不是我们预期的事物隔离级别。 2: 大量无效的SQL影响性能。 注: MySql的可重复读会带来怎样的问题,可以参考该文章。https://www.jianshu.com/p/f7360d259878 排查过程涉及

    2024年02月16日
    浏览(48)
  • MySQL运维5-Mycat配置

    1.1 简介 schema.xml作为Mycat中最重要的配置文件之一,涵盖了Mycat的逻辑库、逻辑表、分片规则、分片节点即数据源的配置。主要包括一下三组标签 schema标签 datanode标签 datahost标签 1.2 schema标签 用于定于Mycat实例中的逻辑库,一个Mycat实例中,可以有多个数据库,可以通过schema标

    2024年02月04日
    浏览(44)
  • MyCat配置文件schema.xml讲解

    1.1 schema标签 如果checkSQLschema配置的为false,那么执行DB01.TB_ORDER时就会报错,必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询,列表查询模式默认为100,最多只查询100条。因为用mycat后默认数据量特别大,查询全表数据是十分耗费性能的。 要拆分的表我

    2024年02月13日
    浏览(32)
  • MyCat配置rule.xml、server.xml讲解

    rule.xml中配置的主要就是拆分表的规则,rule.xml中主要包含两类标签 tableRule 和Function。 tableRule标签里面主要配置我们的分片规则,Function里面涉及的是分片规则里面所涉及的java类,都是在function中配置的。 tableRule主要配置表的分片规则,里面rule标签内主要有两个字段column(根

    2024年02月14日
    浏览(48)
  • MSSQL内置数据库角色及访问权限设置

    MSSQL数据库内置数据库角色 在MSSQL数据库中,有一些内置的数据库角色,这些角色具有特定的权限和功能。以下是常见的内置角色: sysadmin :sysadmin是服务器级别的角色,拥有最高权限。sysadmin可以执行服务器上的任何操作,包括创建、修改和删除数据库、登录和安全设置等。

    2024年02月13日
    浏览(48)
  • MariaDB 使用 root 账户管理数据库用户权限和远程登录权限设置

    MariaDB 使用 root 账户管理数据库用户权限和远程登录权限设置 作为一种流行的关系型数据库管理系统,MariaDB 提供了丰富的功能和灵活的权限控制机制。在本文中,我们将学习如何使用 root 账户来创建新用户,并为其分配特定的数据库权限和远程登录权限。 首先,我们需要使

    2024年01月23日
    浏览(51)
  • 数据库安全控制——授权及回收权限

    任务描述 本关任务:系统用户 root 授权 user1 用户创建数据库 teachingdb2 及其所有对象的权限 相关知识 为了完成本关任务,你需要掌握 MySQL 的权限管理。 MySql系统库中的权限表 MySql 系统库中的权限表: user:最重要的权限表,存储允许连接到服务器的账号。 db:存储用户对某

    2024年02月05日
    浏览(50)
  • HBase的数据库安全与权限管理

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase具有高可靠性、高性能和高可扩展性等特点,适用于大规模数据存储和实时数据处理。 在现代企业中,数据安全和权限管

    2024年02月20日
    浏览(45)
  • MySQL运维14-管理及监控工具Mycat-web的安装配置

    Mycat-web(现改名为Mycat-eye)是对Mycat-server提供监控服务,通过JDBC连接对Mycat,MySQL监控,监控远程服务器的cpu,内存,网络,磁盘等情况的使用。Mycat-web运行过程中需要依赖zookeeper,因此需要先安装zookeeper,下载地址如下: zookeeper:链接:  https://pan.baidu.com/s/1LiQ5qg15Lft0okUDYi9oGg 提取码:

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包