PolarProxy の SQL Firewall を使用すると、PolarDB for MySQL クラスターに到達する前に、特定の SQL ステートメントまたはステートメントタイプをブロックできます。ブラックリストルールを使用すると、意図しないデータ操作や不正なデータ操作 (無制限の DELETE または UPDATE ステートメント、DDL コマンド、セキュリティインシデント中に特定された特定の SQL パターンなど) を防止できます。
仕組み
PolarProxy は、プロキシレイヤーで SQL ステートメントをインターセプトし、設定されたブラックリストルールと比較します。ルールに一致するステートメントはエラーで拒否され、その他のすべてのステートメントは通常どおり通過します。
3 つのルールモードが利用可能です。
| モード | ブロックパターンを定義する方法 | 最適な用途 |
|---|---|---|
| 固定ルールモード | コンソールで組み込みの条件 (ステートメントタイプ、WHERE 句の欠落、特定の列または関数、ワイルドカードアスタリスク) を選択します。 | クラスターまたはアカウント全体でリスクの高い広範なカテゴリのステートメントをブロックする場合 |
| カスタムパラメーター化 SQL モード | 特殊なヒントを使用して PolarProxy 経由でターゲットステートメントを実行します。PolarProxy は、変数位置の任意の値に一致するパラメーター化されたテンプレートを生成します。 | リテラル値に関係なく、構造的に同一のステートメントのファミリーをブロックする場合 |
| カスタム SQL モード | 異なるヒントを使用して PolarProxy 経由で正確なステートメントを実行します。 | 特定の 1 つのステートメントをブロックする場合。値が異なるステートメントは影響を受けません。 |
前提条件
開始する前に、以下を確認してください。
PolarProxy が有効な PolarDB for MySQL クラスター
PolarDB コンソールへのアクセス
ブラックリストルールの作成
PolarDB コンソールにログインします。
コンソールの左上隅で、ご利用のクラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、設定項目と管理 > セキュリティ管理 を選択します。
[SQL Firewall] タブで、左上隅の [追加] をクリックします。
「[Create A Rule]」ダイアログボックスで、モードを選択し、パラメーターを設定します。
固定ルールモード
以下の表に記載されているパラメーターを設定し、次に、[OK] をクリックします。
基本情報
| パラメーター | 必須 | 説明 |
|---|---|---|
| ルール名 | はい | ルール名。数字と文字のみを含み、30 文字以内である必要があります。 |
| 説明 | いいえ | ルールの説明。64 文字以内です。 |
| エンドポイント | はい | ルールが適用されるエンドポイント。 |
設定
| パラメーター | 必須 | 説明 |
|---|---|---|
| ルールタイプ | はい | ブラックリストルール を選択します。 |
| 現在のモード | いいえ | 保護モード に設定します。PolarProxy は、このルールに一致する SQL ステートメントをブロックします。 |
| データベースアカウント名 | いいえ | このルールを適用するデータベースアカウントです。選択肢は以下のとおりです:すべてのアカウント(すべてのアカウントに適用;隣接するフィールドは空欄のままにしてください)、含める(指定したアカウントのみに適用;少なくとも 1 つのアカウント名を入力してください)、または 除外(指定したアカウントを除くすべてのアカウントに適用;少なくとも 1 つのアカウント名を入力してください)。アカウント名は、次のいずれかの形式に従う必要があります:Username(例:user)または Username@IP アドレス(例:user@10.0.0.0)。複数のアカウント名はカンマ(,)で区切ります。 |
| **アスタリスク (*) を含む SQL のブロック** | いいえ | 有効 に設定すると、アスタリスク(*)を含む SQL ステートメントがブロックされます。 |
| 特定の種類の SQL のブロック | いいえ | 有効 に設定すると、特定の種類の SQL ステートメントがブロックされます。有効化後は、少なくとも 1 つの種類を選択してください:CREATE、DROP、ALTER、TRUNCATE、RENAME、INSERT、UPDATE、SELECT、または DELETE。 |
| WHERE 句のない SQL のブロック | いいえ | 有効 に設定すると、WHERE 句を含まない UPDATE、SELECT、または DELETE ステートメントがブロックされます。有効化後は、少なくとも 1 つの種類を選択してください。この設定は、少なくとも 1 つのテーブル名を参照するステートメントにのみ適用されます。たとえば、SELECT 1; はブロックされません。 |
| 特定のカラムを参照する SQL のブロック | いいえ | 有効 に設定すると、特定のカラムを参照する SQL ステートメントがブロックされます。有効化後は、すべて(すべてのカラム)、含める(指定したカラムのみ;少なくとも 1 つを入力してください)、または 除外(指定したカラムを除くすべてのカラム;少なくとも 1 つを入力してください)から選択します。 |
| 特定の関数を呼び出す SQL のブロック | いいえ | 有効 に設定すると、特定の関数を呼び出す SQL ステートメントがブロックされます。有効化後は、すべて(すべての関数)、含める(指定した関数のみ;少なくとも 1 つを入力してください)、または 除外(指定した関数を除くすべての関数;少なくとも 1 つを入力してください)から選択します。 |
| 特定のカラムおよび特定の関数を組み合わせた SQL のブロック | いいえ | 有効 に設定すると、カラムと関数の両方の条件に一致する SQL ステートメントがブロックされます。関数名とカラム名のそれぞれについて、少なくとも 1 つずつ入力してください。関数名 および カラム名 の各パラメーターでは、含める または 除外 のいずれかを選択できます。下記の表に、これらの組み合わせの動作を示します。 |
関数名と列名の組み合わせ
| 関数名 | 列名 | ブロックされるステートメント |
|---|---|---|
| 含める | 含める | 指定された関数と指定された列の両方を含むステートメント |
| 含める | 除外する | 指定された関数を含み、指定された列を含まないステートメント |
| 除外する | 含める | 指定された関数を含まず、指定された列を含むステートメント |
| 除外する | 除外する | 指定された関数も指定された列も含まないステートメント |
カスタムパラメーター化 SQL モード
カスタムパラメーター化 SQL モードでは、PolarProxy は、提供された実際の SQL ステートメントからパラメーター化されたテンプレートを生成します。テンプレートは、すべてのリテラル値を ? プレースホルダーに置き換え、PolarProxy は、使用される実際の値に関係なく、テンプレート構造に一致する将来のすべてのステートメントをブロックします。
例: select id from sqlblack_test where id = 1; をブラックリストに追加すると、PolarProxy はテンプレート select id from sqlblack_test where id = ? を生成します。テンプレート内の疑問符 (?) は任意の値を示します。
[ルールの作成]ダイアログボックスで、[カスタムパラメーター化SQLモード]を選択します。必須パラメーターを設定します。[設定]セクションでは、すべてのオプションを無効化できます。
「[OK]」をクリックします。
指定されたエンドポイントに、ルールで定義された[データベースアカウント名]を使用して接続します。
ブロックする SQL ステートメントの前に
/* store_to_blacklist */ヒントを付けて実行します。/* store_to_blacklist */ select id from sqlblack_test where id = 1;PolarProxy は、パラメーター化されたテンプレート
select id from sqlblack_test where id = ?をproxy_auditing.sql_listテーブルに保存します。5 秒間待ちます。その後、テンプレートに一致するすべてのステートメントがブロックされます。PolarProxy は次のエラーを返します。
ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xxx'@'x.x.x.x' to database 'xzh': This SQL is in blacklist bl_test.bl_testはブラックリストルールテーブルの名前です。
MySQL コマンドラインを使用する場合は、接続時に-cオプションを追加します。-cがないと、MySQL クライアントはステートメントをサーバーに送信する前にコメント形式のヒントを削除するため、/* store_to_blacklist */は効果がありません。
カスタム SQL モード
カスタム SQL モードでは、PolarProxy は、提供された正確なステートメント (特定のパラメーター値を含む) のみをブロックします。値が異なるステートメントはブロックされません。
[ルールの作成] ダイアログボックスで、[カスタム SQL モード] を選択します。 必須パラメーターを設定します。 [設定] セクションでは、すべてのオプションを無効にすることができます。
[OK] をクリックします。
指定されたエンドポイントに、ルールで定義された[データベースアカウント名]を使用して接続します。
ブロックするステートメントの前に
/* orginal_store_to_blacklist */ヒントを付けて実行します。/* orginal_store_to_blacklist */ update t set k = 2 where id = 2;PolarProxy は、この正確なステートメントを
proxy_auditing.org_sql_listテーブルに保存します。5 秒間待ちます。その後、そのクラスターで
update t set k = 2 where id = 2;を実行するとブロックされます。たとえばupdate t set k = 3 where id = 5;のように値が異なるステートメントは影響を受けません。一致したステートメントがブロックされると、PolarProxy は次のエラーを返します。ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xxx'@'x.x.x.x' to database 'xzh': This SQL is in blacklist bl_test.
MySQL コマンドラインを使用する場合は、接続時に-cオプションを追加します。-cがないと、MySQL クライアントはステートメントをサーバーに送信する前にコメント形式のヒントを削除するため、/* orginal_store_to_blacklist */は効果がありません。
ブラックリストルールの有効化または無効化
PolarDB コンソールにログインします。
コンソールの左上隅で、ご利用のクラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、[設定と管理] > [セキュリティ管理] を選択します。
[SQL Firewall] タブで、該当するルールを見つけ、[有効化/無効化] を切り替えます。
確認ダイアログで、[OK] をクリックします。
一度に複数のルールを有効または無効にするには、ルールリストでそれらを選択し、次に [有効] または [無効] をクリックします。
ブラックリストルールの変更
PolarDB コンソールにログインします。
コンソールの左上隅で、ご利用のクラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、[設定と管理] > [セキュリティ管理] を選択します。
「[SQL ファイアウォール]」タブで、ルールを見つけ、「[操作]」列の「[変更]」をクリックします。
「[ルールの変更]」ダイアログボックスで、必要に応じてパラメーターを更新し、その後[OK]をクリックします。
ルール名は作成後に変更できません。カスタムパラメーター化 SQL モードルールまたはカスタム SQL モードルールに保存されている SQL ステートメントを更新するには、基になるテーブルから直接ステートメントを削除し、再度追加する必要があります。これはコンソールからは実行できません。
ブラックリストルールの削除
PolarDB コンソールにログインします。
コンソールの左上隅で、ご利用のクラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、クラスター ID をクリックします。
左側のナビゲーションウィンドウで、設定項目と管理 > セキュリティ管理 を選択します。
[SQL ファイアウォール] タブで、ルールを見つけ、[操作] 列の [削除] をクリックします。
確認ダイアログで、[OK] をクリックします。
複数のルールを一度に削除するには、ルール リストでそれらを選択し、次に [削除] をクリックします。
カスタムルールから保存された SQL ステートメントを削除する
コンソールでルールを無効にするか削除しても、保存された SQL ステートメントは基になるテーブルに残ります。後でルールを再度有効にすると、PolarProxy はそれらの保存されたステートメントに基づいてブロックを再開します。
保存されたステートメントを完全に削除するには、スーパー管理者アカウントを使用してプライマリノードに接続し、テーブルから関連する行を直接削除します。
これらのテーブルに対して DROP ステートメントを実行しないでください。削除したい特定の行のみを削除してください。
カスタムパラメーター化 SQL モード
保存されたステートメントは proxy_auditing.sql_list テーブルにあります。このテーブルから関連する行を削除します。テンプレートは 5 秒以内に一致しなくなります。
カスタム SQL モード
保存されたステートメントは proxy_auditing.org_sql_list テーブルにあります。このテーブルから関連する行を削除します。ブロックは 5 秒以内に適用されなくなります。