一、system 标签
属性
取值
含义
charset
utf8
设置Mycat的字符集, 字符集需要与MySQL的字符集保持一致
nonePasswordLogin
0,1
0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户
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 ;
sequnceHandlerType
0,1,2
用来指定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解析器, 在MyCat1.3后增加了Druid解析器, 所以要设置defaultSqlParser属性来指定默认的解析器; 解析器有两个 : druidparser 和 fdbparser, 在 MyCat1.4之后,默认是druidparser, fdbparser已经废除了
processors
1,2....
指定系统可用的线程数量, 默认值为CPU核心 x 每个核心运行线程数量; processors 会 影响processorBufferPool, processorBufferLocalPercent, processorExecutor属性, 所有, 在性能调优时, 可以适当地修改processors值
processorBufferChunk
指定每次分配Socket Direct Buffer默认值为4096字节, 也会影响BufferPool长度, 如果一次性获取字节过多而导致buffer不够用, 则会出现警告, 可以调大该值
processorExecutor
指定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
参考资料:《开源数据库中间件MyCat实战笔记》
快速入手通道:发送简信“MyCat资料”免费获取
二、user 标签
123456
ITCAST
true
1000
0
user标签主要用于定义登录MyCat的用户和权限 :
: name 属性用于声明用户名 ;
123456 : 指定该用户名访问MyCat的密码;
ITCAST : 能够访问的逻辑库, 多个的话, 使用 "," 分割
true : 是否只读
11111 : 指定前端的整体连接数量 , 0或不设置表示不限制
0 : 是否对密码加密默认 0 否 , 1是
java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456
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黑名单。
false
黑名单拦截明细配置:
配置项
缺省值
描述
selelctAllow
true
是否允许执行 SELECT 语句
selectAllColumnAllow
true
是否允许执行 SELECT * FROM T 这样的语句。如果设置为 false,不允许执行 select * fromt,但可以 select * from (select id, name from t) a。这个选项是防御程序通过调用 select * 获得数据表的结构信息。
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
strictSyntaxCheck
true
是否进行严格的语法检测,Druid SQLParser 在某些场景不能覆盖所有的SQL 语法,出现解析 SQL 出错,可以临时把这个选项设置为 false,同时把 SQL 反馈给Druid 的开发者。
conditionOpXorAllow
false
查询条件中是否允许有 XOR 条件。XOR 不常用,很难判断永真或者永假,缺省不允许。
conditionOpBitwseAllow
true
查询条件中是否允许有"&"、"~"、"I"、"^"运算符。
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 中作为"被修改表"出现
参考资料:《开源数据库中间件MyCat实战笔记》
快速入手通道:发送简信“MyCat资料”免费获取