Mycat 安全設定
權限配置
1、 user 标簽權限控制
目前 Mycat 對于中間件的連接配接控制并沒有做太複雜的控制,目前隻做了中間件邏輯庫級别的讀寫權限控制。是通過server.xml 的 user 标簽進行配置。
#server.xml配置檔案user部分
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
#如下圖
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN1UWMxMzN4M2NlZzN4UTMlNDOzEWM0MTZ2gDNwcTZi9CX3EzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
配置說明
标簽屬性 | 說明 |
name | 應用連接配接中間件邏輯庫的使用者名 |
password | 該使用者對應的密碼 |
TESTDB | 應用目前連接配接的邏輯庫中所對應的邏輯表。schemas 中可以配置一個或多個 |
readOnly | 應用連接配接中間件邏輯庫所具有的權限。true 為隻讀,false 為讀寫都有,預設為 false |
測試案例
#測試案例一
# 使用user使用者,權限為隻讀(readOnly:true)
# 驗證是否可以查詢出資料,驗證是否可以寫入資料
#1、用user使用者登入,運作指令如下: mysql -uuser -puser -h 192.168.140.128 -P8066
#2、切換到TESTDB資料庫,查詢orders表資料,如下:
use TESTDB
select * from orders;
#3、可以查詢到資料,如下圖
#4、執行插入資料sql,如下:
insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);
#5、可看到運作結果,插入失敗,隻有隻讀權限,如下圖:
#測試案例二
# 使用mycat使用者,權限為可讀寫(readOnly:false)
#1、用mycat使用者登入,運作指令如下:
mysql -umycat -p123456 -h 192.168.140.128 -P8066
#2、切換到TESTDB資料庫,查詢orders表資料,如下: use TESTDB
#5、可看到運作結果,插入成功,如下圖:
privileges 标簽權限控制
在 user 标簽下的 privileges 标簽可以對邏輯庫(schema)、表(table)進行精細化的DML 權限控制。
privileges 标簽下的 check 屬性,如為 true 開啟權限檢查,為 false 不開啟,預設為 false。
由于 Mycat 一個使用者的 schemas 屬性可配置多個邏輯庫(schema) ,是以 privileges 的下級節點 schema 節點同樣可配置多個,對多庫多表進行細粒度的 DML 權限控制。
#server.xml配置檔案privileges部分#配置orders表沒有增删改查權限
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<!-- 表級 DML 權限設定 -->
<privileges check="true">
<schema name="TESTDB" dml="1111" >
<table name="orders" dml="0000"></table>
<!--<table name="tb02" dml="1111"></table>-->
</schema>
</privileges>
</user>
DML 權限 | 增加(insert) | 更新(update) | 查詢(select) | 删除(select) |
0000 | 禁止 | |||
0010 | 可以 | |||
1110 | ||||
1111 |
#使用mycat使用者,privileges配置orders表權限為禁止增删改查(dml="0000")
#驗證是否可以查詢出資料,驗證是否可以寫入資料
#1、重新開機mycat,用mycat使用者登入,運作指令如下:
mysql -umycat -p123456 -h 192.168.140.128 -P8066
#2、切換到TESTDB資料庫,查詢orders表資料,如下: use TESTDB
select * from orders;
#3、禁止該使用者查詢資料,如下圖
insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);
#5、可看到運作結果,禁止該使用者插入資料,如下圖:
#使用mycat使用者,privileges配置orders表權限為可以增删改查(dml="1111")
#驗證是否可以查詢出資料,驗證是否可以寫入資料
#1、重新開機mycat,用mycat使用者登入,運作指令如下:
mysql -umycat -p123456 -h 192.168.140.128 -P8066
#2、切換到TESTDB資料庫,查詢orders表資料,如下: use TESTDB
select * from orders;
#3、可以查詢到資料,如下圖
delete from orders where id in (7,8);
SQL 攔截
firewall 标簽用來定義防火牆;firewall 下 whitehost 标簽用來定義 IP 白名單 ,blacklist 用來定義SQL 黑名單。
1、 白名單
可以通過設定白名單,實作某主機某使用者可以通路 Mycat,而其他主機使用者禁止通路
#設定白名單
#server.xml配置檔案firewall标簽
#配置隻有192.168.140.128主機可以通過mycat使用者通路
<firewall>
<whitehost>
<host host="192.168.140.128" user="mycat"/>
</whitehost>
</firewall>
#重新開機Mycat後,192.168.140.128主機使用mycat使用者通路mysql -umycat -p123456 -h 192.168.140.128 -P 8066
#可以正常通路,如下圖
#在此主機換user使用者通路,禁止通路
#在192.168.140.127主機用mycat使用者通路,禁止通路
2、 黑名單
可以通過設定黑名單,實作 Mycat 對具體 SQL 操作的攔截,如增删改查等操作的攔截
#設定黑名單
#server.xml配置檔案firewall标簽
#配置禁止mycat使用者進行删除操作
<firewall>
<whitehost>
<host host="192.168.140.128" user="mycat"/>
</whitehost>
<blacklist check="true">
<property name="deleteAllow">false</property>
</blacklist>
</firewall>
#重新開機Mycat後,192.168.140.128主機使用mycat使用者通路
mysql -umycat -p123456 -h 192.168.140.128 -P 8066
#可以正常通路,如下圖
#切換TESTDB資料庫後,執行删除資料語句
delete from orders where id=7;
#運作後發現已禁止删除資料,如下圖
可以設定的黑名單SQL 攔截功能清單
配置項 | 預設值 | 描述 |
selelctAllow | true | 是否允許執行 SELECT 語句 |
deleteAllow | 是否允許執行 DELETE 語句 | |
updateAllow | 是否允許執行 UPDATE 語句 | |
insertAllow | 是否允許執行 INSERT 語句 | |
createTableAllow | 是否允許建立表 | |
setAllow | 是否允許使用 SET 文法 | |
alterTableAllow | 是否允許執行 Alter Table 語句 | |
dropTableAllow | 是否允許修改表 | |
commitAllow | 是否允許執行 commit 操作 | |
rollbackAllow | 是否允許執行 roll back 操作 |