天天看點

Mycat 安全設定

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>       

#如下圖

Mycat 安全設定

配置說明

标簽屬性 說明
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、可以查詢到資料,如下圖

Mycat 安全設定

#4、執行插入資料sql,如下:

insert into orders(id,order_type,customer_id,amount) values(7,101,101,10000);

#5、可看到運作結果,插入失敗,隻有隻讀權限,如下圖:

Mycat 安全設定

#測試案例二

# 使用mycat使用者,權限為可讀寫(readOnly:false)

#1、用mycat使用者登入,運作指令如下:

mysql -umycat -p123456 -h 192.168.140.128 -P8066

#2、切換到TESTDB資料庫,查詢orders表資料,如下: use TESTDB

Mycat 安全設定

#5、可看到運作結果,插入成功,如下圖:

Mycat 安全設定

 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>      
Mycat 安全設定
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、禁止該使用者查詢資料,如下圖      
Mycat 安全設定

insert into orders(id,order_type,customer_id,amount) values(8,101,101,10000);

#5、可看到運作結果,禁止該使用者插入資料,如下圖:

Mycat 安全設定

#使用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、可以查詢到資料,如下圖      
Mycat 安全設定
Mycat 安全設定

delete from orders where id in (7,8);

Mycat 安全設定

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 安全設定

#重新開機Mycat後,192.168.140.128主機使用mycat使用者通路mysql -umycat -p123456 -h 192.168.140.128 -P 8066

#可以正常通路,如下圖

Mycat 安全設定

#在此主機換user使用者通路,禁止通路

Mycat 安全設定

#在192.168.140.127主機用mycat使用者通路,禁止通路

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 安全設定

#重新開機Mycat後,192.168.140.128主機使用mycat使用者通路

mysql -umycat -p123456 -h 192.168.140.128 -P 8066

#可以正常通路,如下圖 

Mycat 安全設定

#切換TESTDB資料庫後,執行删除資料語句

delete from orders where id=7;

#運作後發現已禁止删除資料,如下圖

Mycat 安全設定

可以設定的黑名單SQL 攔截功能清單

配置項 預設值 描述
selelctAllow true 是否允許執行 SELECT 語句
deleteAllow 是否允許執行 DELETE 語句
updateAllow 是否允許執行 UPDATE 語句
insertAllow 是否允許執行 INSERT 語句
createTableAllow 是否允許建立表
setAllow 是否允許使用 SET 文法
alterTableAllow 是否允許執行 Alter Table 語句
dropTableAllow 是否允許修改表
commitAllow 是否允許執行 commit 操作
rollbackAllow 是否允許執行 roll back 操作