--sqlファイアウォールのMycat

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 中作为"被修改表"出现
发布了1326 篇原创文章 · 获赞 2057 · 访问量 519万+

おすすめ

転載: blog.csdn.net/l1028386804/article/details/104662017