権利プロファイル
1.ユーザーラベルのアクセス許可の制御
現在、Mycatはミドルウェアの接続制御をそれほど複雑に制御しておらず、現在、ミドルウェアロジックライブラリレベルでの読み取りおよび書き込み権限のみを制御しています。これは、server.xmlのユーザータグを介して構成されます。
//server.xmlファイルのユーザー部分でユーザーパスワードおよびその他の情報を構成します
2.特権ラベルのアクセス制御
ユーザーラベルの下の特権ラベルは、ロジックライブラリ(スキーマ)とテーブル(テーブル)に対して洗練されたDMLアクセス許可制御を実行できます。
特権ラベルの下のcheck属性は、trueの場合、権限チェックを有効にし、falseは有効にせず、デフォルトはfalseです。Mycatのユーザーのスキーマ属性は複数のロジックライブラリ(スキーマ)で構成できるため、特権の下位ノードスキーマノードも複数で構成でき、複数のデータベースと複数のテーブルに対してきめ細かいDMLアクセス許可制御が実行されます。
// t1テーブルのすべての権限は禁止されています
<user name="mycat" defaultAccount="true"> //针对mycat用户
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
<!-- 表级 DML 权限设置 -->
<privileges check="true">
<schema name="TESTDB" dml="1111" > //TESTDB逻辑库所有权限
<table name="t1" dml="0000"></table> //t1表没有任何权限
</schema>
</privileges>
</user>
!mycatを再起動します
// mycatテストにログインします
mysql -umycat -p123456 -P 8066 -h192.168.1.61
mysql> use TESTDB;
mysql> select * from t1;
ERROR 3012 (HY000): The statement DML privilege check is not passed, reject for user 'mycat'
//没有权限查看t1表
構成手順
DML権限 | 増やす(挿入) | 更新 | 表示(選択) | 削除 |
---|---|---|---|---|
0000 | 禁止する | 禁止する | 禁止する | 禁止する |
0010 | 禁止する | 禁止する | できる | 禁止する |
1110 | できる | できる | できる | 禁止する |
1111 | できる | できる | できる | できる |
SQLインターセプト
ファイアウォールラベルはファイアウォールを定義するために使用され、ファイアウォールの下のホワイトホストラベルはIPホワイトリストを定義するために使用され、ブラックリストはSQLブラックリストを定義するために使用されます。
1.ホワイトリスト
ホワイトリストを設定して、特定のホストのユーザーがMycatにアクセスできる一方で、他のホストのユーザーはMycatにアクセスできないようにすることができます。
<firewall>
<whitehost>
<host host="192.168.1.67" user="mycat"/> //mycat用户只允许在1.67主机上登录
</whitehost>
!mycatを再起動します
2.ブラックリストブラックリストを
設定することにより、Mycatは、操作の追加、削除、変更、チェックなど、特定のSQL操作をブロックできます。
<firewall>
<whitehost>
<host host="192.168.1.67" user="mycat"/>
</whitehost>
<blacklist check="true">
<property name="deleteAllow">false</property> //不可以使用delete语句
</blacklist>
</firewall>
設定可能なブラックリストSQLブロッキング関数のリスト
構成項目 | デフォルト値 | 説明 |
---|---|---|
selelctAllow | true | SELECTステートメントの実行を許可するかどうか |
deleteAllow | true | DELETEステートメントの実行を許可するかどうか |
updateAllow | true | UPDATEステートメントの実行を許可するかどうか |
insertAllow | true | INSERTステートメントの実行を許可するかどうか |
createTableAllow | true | テーブルの作成を許可するかどうか |
setAllow | true | SET構文の使用を許可するかどうか |
alterTableAllow | true | ALTERTableステートメントの実行を許可するかどうか |
dropTableAllow | true | テーブルの変更を許可するかどうか |
commitAllow | true | コミット操作を許可するかどうか |
rollbackAllow | true | ロールバック操作を許可するかどうか |
trueは許可し、falseは拒否します