一、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 |
參考資料:
《深入理解JVM & G1 GC》
想要快速獲取資料的同學:請添加助理VX:C18173184271,備註一下CSDN+工作年限!
免費獲取
以便能夠充分理解學習!
二、user 標籤
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">ITCAST</property>
<property name="readOnly">true</property>
<property name="benchmark">1000</property>
<property name="usingDecrypt">0</property>
<!-- 表級 DML 權限設置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
user標籤主要用於定義登錄MyCat的用戶和權限 :
<user name="root" defaultAccount="true">
: name 屬性用於聲明用戶名 ;<property name="password">123456</property>
: 指定該用戶名訪問MyCat的密碼;<property name="schemas">ITCAST</property>
: 能夠訪問的邏輯庫, 多個的話, 使用 “,” 分割<property name="readOnly">true</property>
: 是否只讀<property name="benchmark">11111</property>
: 指定前端的整體連接數量 , 0或不設置表示不限制<property name="usingDecrypt">0</property>
: 是否對密碼加密默認 0 否 , 1是
java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456
<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 這樣的語句。如果設置爲 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 | 查詢條件中是否允許有"&"、"~"、" |
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實戰筆記》
,只需你多多支持我這篇文章。
多多支持,即可免費獲取資料——三連之後(承諾:100%免費)
快速入手通道:添加助理VX:
C18173184271,備註一下CSDN+工作年限!
免費獲取!誠意滿滿!!!