Mycatはポスト監査SQL文にSQLインターセプタによって提供されている場合、その後、Mycatは、SQLは、ファイアウォールの事前防止にある供給しました。
なぜ私はSQLのファイアウォールを使用する必要がありますか?
おなじみのMySQLの子供用の靴に対応して、我々は、ユーザーが唯一のいくつかのIPを介してデータベースにアクセスすることができます指定することができます。しかし、我々はすべてがMycatに引き渡されるデータベースにアクセスするための認証を受け、Mycatを使用した後。それらのユーザーの前に、私たちはMycatでserver.xmlファイルを構成し、かつMycatホストへのすべてのアクセスに非常に安全であるデータベースを、ログインすることができます。SQLファイアウォール機能のMycatは、私たちにどのユーザーがどのホストバックエンドデータベースを介して機能にアクセスすることができます一元管理を与えます。
また、Mycatは、私たちはいくつかのSQL文を保護することを可能にする機能を、シールドは、そのような文が追加または条件などDROP文を削除しませんでしたSQL SQLファイアウォールの実装が提供します。データのセキュリティを強化するために。
SQLファイアウォールのMycatを有効にする方法?
ファイアウォールSQLのMycatを有効にするには、以下のように、server.xmlファイル内のファイアウォールのタグを追加する必要があります。
<firewall>
<whitehost>
<host user="root" host="127.0.0.1"></host>
</whitehost>
<blacklist check="true">
<property name="noneBaseStatementAllow">true</property>
<property name="deleteWhereNoneCheck">true</property>
</blacklist>
</firewall>
これは、SQLファイアウォールのMycatを有効にするとwhitehostホストとユーザーのホワイトリストを設定するには、タブ、ホワイトリストホストとユーザーの構成のみがMycatにアクセスすることができます。例えば、上記のような構成、アクセスMycat、他のユーザーや他のホストにホストMycatはMycatにアクセスできるノードでのみルートユーザ。
ブラックリストタブの下で、このリストには、ブラックリストのリストを設定Mycatにどのような操作上の制限の必要性を設定します。コンフィギュレーションは、上述したような、我々は、(真が許可されていません)DDL操作を許可delete文は何もあり条件場所(真がチェックされ、許可されていない)かどうかをチェックしないようにするかどうかを設定しました。
実際の構成
server.xmlファイルの次の、我々は、上記の構成を追加します。最後に、server.xmlファイルに示されています。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useHandshakeV10">1</property>
<property name="defaultSqlParser">druidparser</property>
<property name="serverPort">3307</property>
<property name="managerPort">3308</property>
<property name="nonePasswordLogin">0</property>
<property name="bindIp">0.0.0.0</property>
<property name="charset">utf8mb4</property>
<property name="frontWriteQueueSize">2048</property>
<property name="txIsolation">2</property>
<property name="processors">2</property>
<property name="idleTimeout">1800000</property>
<property name="sqlExecuteTimeout">300</property>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="sequenceHandlerType">1</property>
<property name="defaultMaxLimit">1000</property>
<property name="maxPacketSize">104857600</property>
<property name="sqlInterceptor">
io.mycat.server.interceptor.impl.StatisticsSqlInterceptor
</property>
<property name="sqlInterceptorType">
UPDATE,DELETE,INSERT
</property>
<property name="sqlInterceptorFile">/tmp/sql.txt</property>
</system>
<firewall>
<whitehost>
<host user="mycat" host="192.168.175.150"></host>
</whitehost>
<blacklist check="true">
<property name="noneBaseStatementAllow">true</property>
<property name="deleteWhereNoneCheck">true</property>
</blacklist>
</firewall>
<user name="mycat" defaultAccount="true">
<property name="usingDecrypt">1</property>
<property name="password">cTwf23RrpBCEmalp/nx0BAKenNhvNs2NSr9nYiMzHADeEDEfwVWlI6hBDccJjNBJqJxnunHFp5ae63PPnMfGYA==</property>
<property name="schemas">shop</property>
</user>
</mycat:server>
のみを許可Mycatへのユーザーアクセスは、ホスト上で192.168.175.150をmycat上記の構成では、DDL操作は許可されていません。ここで、無症状DELETE文を実行することはできません。
付録:ブラックリスト遮断構成詳細
構成アイテム | デフォルト値 | 説明 |
---|---|---|
selelctAllow | 真 | SELECT文の実行を許可するかどうか |
selectAllColumnAllow | 真 | かどうかはT. * FROMなどの文の実装が選択できるようにします falseに設定すると、Tから選択*を許可されていないが、(選択ID、Tから名前)から*を選択します。このオプションは、構造情報データテーブルを取得*選択呼び出すことで守備のです。 |
selectIntoAllow | 真 | SELECT INTOは、単語を許可するかどうかを問い合わせます |
deleteAllow | 真 | DELETEステートメントを許可するかどうか |
updateAllow | 真 | UPDATEステートメントを許可するかどうか |
insertAllow | 真 | INSERT文を許可するかどうか |
replaceAllow | 真 | REPLACE文の実行を許可するかどうか |
mergeAllow | 真 | MERGE文の実行を許可するかどうか、これはOracleでのみ有効です |
callAllow | 真 | 呼び出し構文は、JDBCを介してストアドプロシージャを呼び出すことができるようにするかどうか |
setAllow | 真 | SET構文の使用を許可するかどうか |
truncateAllow | 真 | TRUNCATE文を使用すると、自動閉鎖が必要な場合は、デフォルトで有効になって、危険です |
createTableAllow | 真 | テーブルを作成することを許可します |
alterTableAllow | 真 | 実行アルター表計算書許可するかどうか |
dropTableAllow | 真 | 修正テーブルを許可するかどうか |
commentAllow | 偽 | コメント文の存在を許可するかどうかを、Oracleユーザーは、ウォールは、差分ヒントとコメントを認識することができ、心配する必要はありません |
noneBaseStatementAllow | 偽 | デフォルトでは無効になって非塩基性ステートメントを、許可するかどうか文以外に、このオプションは、DDLによって遮蔽することができます。 |
multiStatementAllow | 偽 | デフォルトでは無効になって複数のステートメントを実行するための時間を許可するかどうか |
useAllow | 真 | かどうかは、MySQLを実行されるステートメントを使用する、デフォルトのオープンを可能にします |
describeAllow | 真 | かどうかのステートメントは、MySQLの実装を記述できるように、デフォルトのオープン |
showAllow | 真 | かどうかのショーは、MySQLのステートメントを実行できるようにする、デフォルトオープン |
commitAllow | 真 | コミット操作を許可するかどうか |
rollbackAllow | 真 | 操作はロールバックを実行できるようにするかどうか |
## selectIntoAllow、deleteAllow、updateAllow、insertAllow、mergeAllowは、読み取り専用のデータのソースである偽に設定されている場合。## | ||
傍受の設定 - 龍真の条件 | ||
selectWhereAlwayTrueCheck | 真 | SELECT文のWHERE句が真の条件になることはありませんことを確認してください |
selectHavingAlwayTrueCheck | 真 | SELECT文のHAVING句が真の状態になることはありませんかどうかをチェックします |
deleteWhereAlwayTrueCheck | 真 | 句は決して本当に条件であるDELETE文かどうかをチェックします |
deleteWhereNoneCheck | 偽 | DELETE、これは危険である条件かどうかをチェックせずに声明ではなく、SQLインジェクションのリスクの種類 |
updateWhereAlayTrueCheck | 真 | 句は決して本当に条件であるUPDATEステートメントかどうかをチェックします |
updateWhereNoneCheck | 偽 | チェックしていない状態、これはSQLインジェクションのリスクの種類危険ではなく、どこUPDATE文は何です |
conditionAndAlwayTrueAllow | 偽 | (/ HAVING句は、WHERE)と翼真の条件を含むクエリ条件を確認してください |
conditionAndAlwayFalseAllow | 偽 | (/ HAVING句が)と翼偽条件を含むクエリ条件を確認してください |
conditionLikeTrueAllow | 真 | クエリの条件を確認してください(WHERE / HAVING句)の条件は決して本当にLIKEが含まれています |
その他のインターセプト設定 | ||
selectIntoOutfileAllow | 偽 | SELECT ... INTO OUTFILEは、それはデフォルトでは無効になって、これはMySQLのインジェクション攻撃の一般的な手段であり、許可されています |
selectUnionCheck | 真 | 検出SELECT UNION |
selectMinusCheck | 真 | 検出SELECTのMINUS |
selectExceptCheck | 真 | 检测 SELECT EXCEPT |
selectIntersectCheck | true | 检测 SELECT INTERSECT |
mustParameterized | false | 是否必须参数化,如果为 True,则不允许类似 WHERE ID = 1 这种不参数化的 SQL |
strictSyntaxCheck | true | 是否进行严格的语法检测,Druid SQL Parser 在某些场景不能覆盖所有的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 中作为"被修改表"出现 |