server.xml中保存了几乎所有mycat需要的系统配置信息,包括用户和防火墙配置
user标签
user标签用来配置mycat的用户和权限
在user标签中,使用property子标签来定义用户名和密码等信息,使用privileges子标签来定义权限
property子标签
定义账号的信息,使用name属性指定要定义的属性值名称,使用文本内容指定属性值
<property name="password">123456</property>
- user 用户名
- password 密码
- readOnly 是否只读
- schemas 控制用户可以访问的schema,多个schema用
,
分割 - Benchmark 最大连接数,当连接数超过该值时,将对该用户的请求拒绝连接
- usingDecrypt 是否对密码进行加密,默认0
privileges子标签
用来对用户权限进行库/表级别的控制
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
属性
- check属性 是否开始DML权限检查,默认false,不进行检查
- dml属性 值为4位二进制数字的组合,从左到右,分别代表insert,update,select,delete。如
0110
表示允许update和select
子标签
- schema子标签,定义具体schema的dml权限
- table子标签,定义schema中具体表的dml权限
没有设置dml权限的表,继承schema的dml权限
firewall标签
用来进行防火墙配置
<firewall>
<whitehost>
<host host="1*7.0.0.*" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
whitehost子标签
用来配置用户允许哪些IP地址连接,可以使用通配符%
或者*
blacklist用来进行权限拦截
使用property子标签来进行配置
<property name="selelctAllow">false</property>
基础黑名单配置
name | 默认值 | 描述 |
---|---|---|
selectAllow | true | 是否允许SELECT语句 |
selectAllColumnAllow | true | 是否允许SELECT * FROM T 这样的语句 |
selectIntoAllow | true | SELECT 查询中是否允许 INTO 字句 |
deleteAllow | true | 是否允许执行 DELETE 语句 |
updateAllow | true | 是否允许执行 UPDATE 语句 |
insertAllow | true | 是否允许执行 INSERT 语句 |
replaceAllow | true | 是否允许执行 REPLACE 语句 |
mergeAllow | true | 是否允许执行 MERGE 语句,这个只在 Oracle 中有用 |
callAllow | true | 是否允许通过 jdbc 的 call 语法调用存储过程 |
setAllow | true | 是否允许使用 SET 语法 |
truncateAllow | true | truncate 语句是危险,缺省打开,若需要自行关闭 |
createTableAllow | true | 是否允许创建表 |
alterTableAllow | true | 是否允许执行 Alter Table 语句 |
dropTableAllow | true | 是否允许修改表 |
noneBaseStatementAllow | false | 是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽 DDL。 |
multiStatementAllow | false | 是否允许一次执行多条语句 |
useAllow | true | 是否允许执行 mysql 的 use 语句 |
describeAllow | true | 是否允许执行 mysql 的 describe 语句 |
showAllow | true | 是否允许执行 mysql 的 show 语句 |
commitAllow | true | 是否允许执行 commit 操作 |
rollbackAllow | true | 是否允许执行 roll back 操作 |
永真条件黑名单配置
配置项 | 缺省值 | 描述 |
---|---|---|
selectWhereAlwayTrueCheck | true | 检查 SELECT 语句的 WHERE 子句是否是一个永真条件 |
selectHavingAlwayTrueCheck | true | 检查 SELECT 语句的 HAVING 子句是否是一个永真条件 |
deleteWhereAlwayTrueCheck | true | 检查 DELETE 语句的 WHERE 子句是否是一个永真条件 |
deleteWhereNoneCheck | false | 检查 DELETE 语句是否无 where 条件,这是有风险的,但不是 SQL 注入类 |
型的风险
updateWhereAlayTrueCheck | true | 检查 UPDATE 语句的 WHERE 子句是否是一个永真条件
updateWhereNoneCheck | false | 检查 UPDATE 语句是否无 where 条件,这是有风险的,但不是
SQL 注入类型的风险
conditionAndAlwayTrueAllow | false | 检查查询条件(WHERE/HAVING 子句)中是否包含 AND 永真条件
conditionAndAlwayFalseAllow | false | 检查查询条件(WHERE/HAVING 子句)中是否包含 AND 永假条件
conditionLikeTrueAllow | true | 检查查询条件(WHERE/HAVING 子句)中是否包含 LIKE 永真条件
其他黑名单配置
配置项 | 缺省值 | 描述 | |
---|---|---|---|
selectIntoOutfileAllow | false | SELECT ... INTO OUTFILE 是否允许,这个是 mysql 注入攻击的常见手段,缺省是禁止的 | |
selectUnionCheck | true | 检测 SELECT UNION | |
selectMinusCheck | true | 检测 SELECT MINUS | |
selectExceptCheck | true | 检测 SELECT EXCEPT | |
selectIntersectCheck | true | 检测 SELECT INTERSECT | |
mustParameterized | false | 是否必须参数化,如果为 True,则不允许类似 WHERE ID = 1 这种不参数化的 SQL | |
strictSyntaxCheck | true | 是否进行严格的语法检测,Druid SQL Parser 在某些场景不能覆盖所有的SQL 语法,出现解析 SQL 出错,可以临时把这个选项设置为 false,同时把 SQL 反馈给 Druid 的开发者。 | |
conditionOpXorAllow | false | 查询条件中是否允许有 XOR 条件。XOR 不常用,很难判断永真或者永假,缺省不允许。 | |
conditionOpBitwseAllow | true | 查询条件中是否允许有"&"、"~"、" | "、"^"运算符。 |
conditionDoubleConstAllow | false | 查询条件中是否允许连续两个常量运算表达式 | |
minusAllow | true | 是否允许 SELECT * FROM A MINUS SELECT * FROM B 这样的语句 | |
intersectAllow | true | 是否允许 SELECT * FROM A INTERSECT SELECT * FROM B 这样的语句 | |
constArithmeticAllow | true | 拦截常量运算的条件,比如说 WHERE FID = 3 - 1,其中"3 - 1"是常量运算表达式 | |
limitZeroAllow | false | 是否允许 limit 0 这样的语句 |
禁用对象检测黑名单配置
配置项 | 缺省值 | 描述 |
---|---|---|
tableCheck | true | 检测是否使用了禁用的表 |
schemaCheck | true | 检测是否使用了禁用的 Schema |
functionCheck | true | 检测是否使用了禁用的函数 |
objectCheck | true | 检测是否使用了“禁用对对象” |
variantCheck | true | 检测是否使用了“禁用的变量” |
readOnlyTables | 空 | 指定的表只读,不能够在 SELECT INTO、DELETE、UPDATE、INSERT、MERGE 中作为"被修改表"出现 |
system标签
用来进行系统配置,内容较多,下一篇单独介绍
网友评论