开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(一):MyCat - 配置文件详解 - server.xml 之 firewall 配置详解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/755/detail/13253
MyCat - 配置文件详解 - server.xml 之 firewall 配置详解
内容介绍:
一、Firewall 标签
二、firewall 演示
三、黑名单拦截的明细配置
四、拦截配置-永真条件
一、Firewall 标签
Firewall 翻译过来就是防火墙,它是用来定义 my cat 当中的防火墙,而在防火墙的配置当中,分为了两个部分 Whitehost 和 blacklist,White host 指的是 IP 白名单,白名单指的就是哪些IP可以访问 mycat。Blacklist 指的是 SQL 黑名单。firewal1 标签用来定义防火墙; firewall 下 whitehost 标签用来定义 IP 白名单,, blacklist 用来定义 SQI黑 名单。
<firewa11>
<!--白名单配置-->
<whitehost>
<host user="root" host="127 .0.0.1"></host>
</whitehost>
白名单配置指的是哪个IP地址能够以什么样的用户名来访问 mycat,这段配置代表的是 root 用户,可以通过 127.0.0.1,这个 IP 来访问 mycat,其他的 IP 是不可以的。
<!--黑名单配置-->
<blacklist check="true">
( check 代表是否检查)
<property name="selelctAllow">false</property>
selelctAllow 是否允许查询操作,false 为不允许
</blacklist>
</firewa1l>
二、firewall 演示
打开 sever.xml
<!--全局 SQL 防火墙设置-->
<!--白名单可以使用通配符%或着*-->
<!--例如<host host="127.0.0. *" user="root"/> -->
<!--例如<host host="127.0. *" user="root"/>-->
<!--例如<host host="127.x" user="root"/>-->
<!--例如<host host="1*7. +" user="root"/>-->
<!--这些配置情况下对于 127.0.0.1 都能以 root 账户登录-->
<firewall>
<whitehost>
<host host="1*7.0.0.*"user=" root"/>
</ whitehost>
<blacklist check="ture">
<property name="selelctAllow"> ture</property>
<property name="deleteAllow"> false</property>
</blacklist>
</firewall>
这段代表 root 用户可以通过 1*7.0.0.* 来访问 mycat,<blacklist check="ture'">
是允许检查。
重启 mycat,连接 mycat
[ root@localhost mycat]# mysql -h 192.168.192.157 -P 8066 一u root -P
Enterpassword:
ERROR 1045 (HY000) : Access denied for user ' root' with host ’192.168.192.157 '
这个时候发现并没有登录上来,root 用户使用 192.168.192.157 这台主机登录是不被允许的。因为前面提到 root 用户只能以 1*7.0.0.* 这个主机进行匹配,否则没有权限。更改地址进行连接
这里需要明确的第一点,<host host="1*7.0.0.*"user=" root"/>
代表的是 root 用户可以去访问 1*7.0.0.*这个主机上的 mycat。
第二部分执行 use ITCAST 指令,切换一下逻辑库,执行一下 select *feom TB_TEST
查看逻辑表
第三部分插入一个数据
mysql> insert into TB TEST (id, title) values (7, 'goods7') ;
Query OK,1 row affected (0.02sec)
第四部分删除操作
mysql>delete from TB TEST where id=7
ERROR 3012 (HY000) :The statement is ursafe SQL, reject for user ‘root’
不安全的 SQL,拒绝 root
主机的白名单是以 1*7.0.0.* 这个 IP 进行访问,如果不能匹配上这个 IP 则不允许访问。下面指的是用户登录上来以后,针对于每一种类型的 SQL 它能不能访问,slecetAllow 选择为 ture 是允许访问,updateAllow 默认为 ture,deleteallow 配置为 false,不允许执行 delete 操作。
三、黑名单拦截的明细配置
配置项 |
缺省值 |
描述 |
selelctAllow |
true |
selelctAllow |
selectAllColumnAllow |
Ture |
是否允许执行 SELECT * FROMT 这样的语句。如果设置为 false ,不允许执行 select * from t,但可以select * from (select id, name from t)a。这个选项是防御程序通过调用 select * 获得数据表的结构信息。 |
selectIntoAllow |
Ture |
SELECT 查询中是否允许 INTO 字句 |
deletpAllow |
Ture |
是否允许执行 DELETE 语句 |
updateAllow |
Ture |
是否允许执行 UPDATE 语句 |
insertAllow |
Ture |
是否允许执行 INSERT 语句 |
replaceAllow |
Ture |
是否允许执行 REPLACE 语句 |
mergeAllow |
Ture |
是否允许执行 MERGE 语句,这个只在 Ooracle 中有用 |
callAllow |
Ture |
是否允许通过 jdbc的 call 语法调用存储过程 |
setAllow |
true |
是否允许使用 SET 语法 |
truncateAllow |
true |
truncate 语句是危险,缺省打开,若需要自行关闭 |
createTableAllow |
true |
是否允许创建表 |
alterTableAllow |
true |
是否允许执行 Alter Table 语句 |
dropTableAllow |
true |
是否允许修改表 |
commentAllow |
false |
是否允许语句中存在注释, oracle 的用户不用担心, wall 能够识别 hints 和注释的区别 |
noneBaseStatementAllow |
false |
是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽 DDL。 |
multistatementAllow |
false |
是否允许一次执行多条语句 ,缺省关闭 |
useAllow |
true |
是否允许执行 mysql 的 use 语句,缺省打开 |
describeAllow |
Ture |
是否允许执行mysql 的 describe 语句,缺省打开 |
showAllow |
Ture |
是否允许执行 mysql 的 show 语句,缺省打开 |
commitAllow |
Ture |
是否允许执行commit 操作 |
rollbackAllow |
Ture |
是否允许执行 roll back 操作 |
四、拦截配置-永真条件
selectWhereAlwayTrueCheck |
true |
检查SELECT语句的WHERE子句是否是一个永真条件 |
selectWhereAlwayTrueCheck |
true |
检查SELECT 语句的HAVING子句是否是一个永真条件 |
selectWhereAlwayTrueCheck |
true |
检查DELETE语句的WHERE子句是否是一个永真条件 |
selectWhereAlwayTrueCheck |
false |
检查DELETE语句是否无where 条件,这是有风险的,但不是sQL 注入类型的风险 |
updateWhereAlayTrueCheck |
ture |
检查 DELETE 语句是否无 where 条件,这是有风险的,但不是 sQL 注入类型的风险 |
updateWhereNoneCheck |
false |
检查 DELETE 语句是否无 where 条件,这是有风险的,但不是 sQL 注入类型的风险 |
conditi onAndAlwayTrueAllow |
false |
检查查询条件( WHERE/HAVING 子句)中是否包含 AND 永真条件 |
condi ti onAndAIwayFalseAllow |
false |
检查查询条件(WHERE/HAVING 子句)中是否包含 AND 永假条件 |
conditionLikeTrueAllow |
ture |
检查查询条件( WHERE/HAVING 子句)中是否包含LIKE 永真条件 |
如果在业务系统当中,有一些比较特殊的需求,这个时候只需要知道,通 mycat 开始当中防火墙的配置,可以来完成这块的需求。以上就是 firewall 防火墙的配置,主要有两块,一块是主机访问的白名单,另一块是 SQL 的黑名单的配置