system 标签
属性 | 取值 | 含义 | ||
charset | utf8 | 设置Mycat的字符集 , 字符集需要与MySQL的字符集保持一致 | ||
nonePasswordLogin |
0 , 1 | 0为需要密码登陆、 1为不需要密码登陆 ,默认为0 , | ||
useHandshakeV10 | 0 , 1 | 使用该选项主要的目的是为了能够兼容高版本的jdbc驱动 , 是否采用HandshakeV10Packet来与client进行通信 , 1:是 , 0:否 | ||
useSqlStat |
0 , 1 | 开启SQL实时统计, 1 为开启 , 0 为关闭 ; 开启之后, MyCat会自动统计SQL语句的执行 情况 ; mysql -h 127.0.0.1 -P 9066 -u root -p 查看MyCat执行的SQL, 执行效率比较低的SQL , SQL的整体执行情况、读写比例等 ; show @@sql ; show @@sql.slow ; show @@sql.sum ; |
| |
useGlobleTableCheck | 0 , 1 | 是否开启全局表的一致性检测。 1为开启 , 0为关闭 。 | ||
sqlExecuteTimeout | 1000 | SQL语句执行的超时时间 , 单位为 s ; | ||
|
| 用来指定Mycat全局序列类型 , 0 为本地文件 , 1 为数据库方式 , 2 为时间戳列方式 , | ||
sequnceHandlerPattern | 正则表达式 | 必须带有MYCATSEQ或者 mycatseq 进入序列匹配流程 注意MYCATSEQ_有空格的情况 | ||
subqueryRelationshipCheck | true , false | 子查询中存在关联查询的情况下 ,检查关联字段中是否有分片字段 .默认 false | ||
useCompression | 0 , 1 | 开启mysql压缩协议 , 0 : 关闭 , 1 : 开启 | ||
fakeMySQLVersion | 5 . 5 , 5 . 6 | 设置模拟的MySQL版本号 |
属性 | 取值 | 含义 |
defaultSqlParser |
| 由于MyCat的最初版本使用了FoundationDB的SQL解析器 , fdbparser已经废除了 |
processors |
1 ,2 . . . . | 指定系统可用的线程数量 , 默认值为CPU核心 x 每个核心运行线程数量; processors 会影响processorBufferPool ,processorBufferLocalPercent ,processorExecutor属性 , |
processorBufferChunk |
| 指定每次分配Socket Direct Buffer 如果一次性获取字节过多而导致buffer不够用 , 则会出现警告 , 可以调大该值 |
|
| 指定NIOProcessor上共享businessExecutor固定线程池的大小; MyCat把异步任务交给 businessExecutor线程池中 , 在新版本的MyCat中这个连接池使用频次不高 , 可以适当地把该值调小 |
packetHeaderSize |
| 指定MySQL协议中的报文头长度 , 默认4个字节 |
maxPacketSize |
| 指定MySQL协议可以携带的数据最大大小 , 默认值为16M |
idleTimeout | 30 | 指定连接的空闲时间的超时长度;如果超时 ,将关闭资源并回收 , 默认30分钟 |
属性 | 取值 | 含义 |
txIsolation |
1 ,2 , 3 , 4 | 初始化前端连接的事务隔离级别 ,默认为 REPEATED_READ , 对应数字为3 READ UNCOMMITED=1; READ COMMITTED=2; REPEATED READ=3; SERIALIZABLE=4; |
sqlExecuteTimeout | 300 | 执行SQL的超时时间 , 如果SQL语句执行超时 ,将关闭连接; 默认300秒; |
serverPort | 8066 | 定义MyCat的使用端口 , 默认8066 |
managerPort | 9066 | 定义MyCat的管理端口 , 默认9066 |
user 标签
<!-- user标签主要用于定义登录MyCat的用户和权限 -->
<!-- name 属性用于声明用户名; -->
<user name="root" defaultAccount="true">
<!-- 指定该用户名访问MyCat的密码 -->
<property name="password">123456</property>
<!-- 能够访问的逻辑库 , 多个的话 , 使用 "," 分割 -->
<property name="schemas">ITCAST</property>
<!-- 是否只读 -->
<property name="readOnly">true</property>
<!-- 指定前端的整体连接数量 , 0或不设置表示不限制 -->
<property name="benchmark">1000</property>
<!-- 是否对密码加密默认 0 否 , 1是 -->
<!-- java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456 -->
<property name="usingDecrypt">0</property>
<!-- 对用户的 schema 及 下级的 table 进行精细化的 DML 权限控制 -->
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
</user>
<privileges check="false">
A. 对用户的 schema 及 下级的 table 进行精细化的 DML 权限控制;
B. privileges 节点中的 check 属性是用 于标识是否开启 DML 权限检查, 默认 false 标识不检查,当然 privileges 节点不配置,等同 check=false,
由于 Mycat 一个用户的schemas 属性可配置多个 schema ,所以 privileges 的下级节点 schema 节点同样 可配置多个,对多库多表进行细粒度的 DML 权限控制;
C. 权限修饰符四位数字 (0000 - 1111) ,对应的操作是 IUSD ( 增,改,查,删 )。 同时配置了 库跟表的权限,就近原则。以表权限为准。
firewall 标签
firewall标签用来定义防火墙;firewall下whitehost标签用来定义 IP白名单 ,blacklist用来定义 SQL黑名单。
<firewall>
<!-- 白名单配置 -->
<whitehost>
<host user="root" host="127.0.0.1"></host>
</whitehost>
<!-- 黑名单配置 -->
<blacklist check="true">
<property name="selelctAllow">false</property>
</blacklist>
</firewall>
黑名单拦截明细配置 :
配置项 | 缺省值 | 描述 |
selelctAllow | 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 | 是否允许修改表 |
commentAllow | false | 是否允许语句中存在注释,Oracle 的用户不用担心,Wall 能够识别 hints和注释的区别 |
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 |
| true | 是否进行严格的语法检测,Druid SQL Parser 在某些场景不能覆盖所有的SQL 语法,出现解析 SQL 出错, |
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 中作为"被修改表"出现 |