MyCat配置文件詳解(一):server.xml代碼詳細解讀!

一、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的最初版本使用了FoundationDBSQL解析器, 在MyCat1.3後增加了Druid解析器, 所以要設置defaultSqlParser屬性來指定默認的解析器; 解析器有兩個 : druidparserfdbparser, 在 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的用戶和權限 :

  1. <user name="root" defaultAccount="true"> : name 屬性用於聲明用戶名 ;
  2. <property name="password">123456</property> : 指定該用戶名訪問MyCat的密碼;
  3. <property name="schemas">ITCAST</property> : 能夠訪問的邏輯庫, 多個的話, 使用 “,” 分割
  4. <property name="readOnly">true</property> : 是否只讀
  5. <property name="benchmark">11111</property> : 指定前端的整體連接數量 , 0或不設置表示不限制
  6. <property name="usingDecrypt">0</property> : 是否對密碼加密默認 0 否 , 1是
java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456
  1. <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標籤 用來定義防火牆;firewallwhitehost標籤 用來定義 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+工作年限! 免費獲取!誠意滿滿!!!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章