PolarDB コンソールでは、ブラックリストルールの作成、有効化、無効化、変更、削除できます。このトピックでは、ブラックリストルールとその設定方法について説明します。
ブラックリストルール
プロキシはブロック機能を提供します。ブラックリストルールを設定して、特定の種類の SQL ステートメントまたは個別の SQL ステートメントをブロックできます。
ブラックリストルールは、次の 3 つのモードで設定できます:
-
固定ルールモード:コンソールでブラックリストルールを設定するための一般的なモードです。各ルールは、特定のアカウントとクラスターに適用できます。サポートされている一般的なルールのリストについては、「SQL ファイアウォールルールの設定」をご参照ください。
-
カスタムパラメータ化 SQL モード:このモードでは、SQL ステートメント内のすべての変数がパラメータ化され、生成されたテンプレートがデータベースに保存されます。その後、プロキシはこのテンプレートに一致するすべての SQL ステートメントをブロックします。
-
カスタム SQL モード:このモードでは、変数をパラメータ化することなく、特定の SQL ステートメントをそのままブロックします。パラメータが異なる SQL ステートメントは影響を受けません。
ブラックリストルールの作成
- PolarDB コンソールにログインします。
左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、そのIDをクリックします。
-
左側メニューで、 を選択します。
-
[SQL ファイアウォール] タブで、左側の 新しい をクリックします。
-
ルールの作成 ダイアログボックスで、目的のブラックリストモードに基づいてパラメータを設定します。
-
固定ルールモード
-
固定ルールモード を選択した場合は、次のパラメータを設定します。
表 1. SQL ファイアウォールルールのパラメータ パラメータ
必須
説明
[基本情報]
[ルール名]
はい
SQL ファイアウォールルールの名前です。名前は次の要件を満たす必要があります:
-
文字と数字で構成されている必要があります。
-
長さは 30 文字以内にする必要があります。
[説明]
いいえ
識別と管理を容易にするための説明です。
説明説明は 64 文字以内で入力してください。
エンドポイント
はい
ルールが適用されるエンドポイントです。
[設定]
[ルールタイプ]
はい
[ブラックリストルール] を選択します。
[現在のモード]
いいえ
SQL ファイアウォールルールのモードです。このパラメータは常に [保護モード] に設定され、ブラックリストルールに一致する SQL ステートメントがブロックされることを意味します。
[データベースアカウント名]
いいえ
このルールが適用されるデータベースアカウントです。次のオプションがあります:
-
[すべてのアカウント]:クラスター内のすべてのデータベースアカウントにルールを適用します。テキストボックスに何も入力する必要はありません。
-
[含む]:指定されたデータベースアカウントにのみルールを適用します。1 つ以上のアカウント名をカンマ区切りで入力します。
-
[含まない]:指定したアカウントを除く、クラスター内のすべてのデータベースアカウントにルールを適用します。1 つ以上のアカウント名をカンマ区切りで入力します。
説明入力するデータベースアカウント名は、次のいずれかの形式で入力する必要があります:
-
AccountName。例:user。 -
AccountName@IPAddress。例:user@10.0.0.0。
[アスタリスク (*) が設定された SQL をブロック]
いいえ
アスタリスク (
*) を含む SQL ステートメントをブロックします。有効な値:-
[有効]:アスタリスク (
*) を含む SQL ステートメントをブロックします。 -
[無効]:アスタリスク (
*) を含む SQL ステートメントをブロックしません。
[特定のタイプの SQL をブロック]
いいえ
特定の種類の SQL ステートメントをブロックします。有効な値:
-
[有効]:特定の種類の SQL ステートメントをブロックします。特定のタイプの SQL をブロック を有効にする場合は、少なくとも 1 つの種類を選択する必要があります。サポートされている種類:
-
CREATE -
DROP -
ALTER -
TRUNCATE -
RENAME -
INSERT -
UPDATE -
SELECT -
DELETE
-
-
[無効]:特定の種類の SQL ステートメントをブロックしません。
[WHERE のない SQL をブロック]
いいえ
WHERE 句のない SQL ステートメントをブロックします。有効な値:
-
[有効]:WHERE 句のない指定された種類の SQL ステートメントをブロックします。WHERE のない SQL をブロック を有効にする場合は、少なくとも 1 つの種類を選択する必要があります。サポートされている種類:
-
UPDATE -
SELECT -
DELETE
-
-
[無効]:WHERE 句のない SQL ステートメントをブロックしません。
説明このパラメータは、少なくとも 1 つのテーブル名を含む
SELECT、UPDATE、およびDELETEステートメントにのみ適用されます。プロキシはSELECT 1;のようなステートメントをブロックしません。[特定の列を持つ SQL をブロック]
いいえ
特定のカラム名を含む SQL ステートメントをブロックします。有効な値:
-
[有効]:特定のカラム名を含む SQL ステートメントをブロックします。特定の列を持つ SQL をブロック を有効にする場合は、次のオプションが利用可能です:
-
[すべて]:クラスター内のすべてのカラム名にルールを適用します。テキストボックスに何も入力する必要はありません。
-
[以下を含む]:指定されたカラム名にのみルールを適用します。1 つ以上のカラム名をカンマ (,) で区切って入力する必要があります。
-
[以下を含まない]:指定したカラムを除く、クラスター内のすべてのカラム名にルールを適用します。1 つ以上のカラム名をカンマ (,) で区切って入力する必要があります。
-
-
[無効]:特定のカラム名を含む SQL ステートメントをブロックしません。
[特定の関数を持つ SQL をブロック]
いいえ
特定の関数を使用する SQL ステートメントをブロックします。有効な値:
-
[有効]:特定の関数を使用する SQL ステートメントをブロックします。特定の関数を持つ SQL をブロック を有効にする場合は、次のオプションが利用可能です:
-
[すべて]:クラスターのデータベースで実行されるすべての関数にルールを適用します。テキストボックスに何も入力する必要はありません。
-
[以下を含む]:指定された関数にのみルールを適用します。1 つ以上の関数名をカンマ (,) で区切って入力する必要があります。
-
[以下を含まない]:指定した関数を除く、すべての関数にルールを適用します。1 つ以上の関数名をカンマ (,) で区切って入力する必要があります。
-
-
[無効]:特定の関数を使用する SQL ステートメントをブロックしません。
[特定の関数によって参照される特定の列を持つ SQL をブロック]
いいえ
特定の関数を含み、特定のカラム名を参照する SQL ステートメントをブロックします。有効な値:
-
[有効]:特定の関数を含み、特定のカラム名を参照する SQL ステートメントをブロックします。特定の関数によって参照される特定の列を持つ SQL をブロック を有効にする場合は、1 つ以上の 関数名 と 列名 の値を入力する必要があります。具体的には:
-
関数名 が 以下を含む に設定され、列名 も 以下を含む に設定されている場合、ルールはクラスター内で特定の関数を使用し、特定のカラム名を参照する SQL ステートメントに適用されます。
-
関数名 が 以下を含む に設定され、列名 が 以下を含まない に設定されている場合、ルールは指定された関数を、指定されたカラム以外の任意のカラムに対して使用するステートメントに適用されます。
-
関数名 が 以下を含まない に設定され、列名 が 以下を含む に設定されている場合、ルールは指定されたカラムに対して、指定された関数以外の任意の関数を使用するステートメントに適用されます。
-
関数名 に 以下を含まない を選択し、列名 にも 以下を含まない を選択した場合、ルールは、クラスター内で指定されたもの以外の関数を使用し、かつ指定されたもの以外のカラムを参照する SQL ステートメントに適用されます。
-
-
[無効]:特定の関数を含み、特定のカラム名を参照する SQL ステートメントをブロックしません。
-
-
ルールを設定した後、確定 をクリックします。
-
-
カスタムパラメータ化 SQL モード
-
カスタムパラメータ化 SQL モード を選択した場合は、必須パラメータを設定します。詳細については、「SQL ファイアウォールルールのパラメータ」をご参照ください。
説明カスタムパラメータ化 SQL モード を使用する場合、設定 でブロックルールを有効にする必要はありません。
-
ルールを設定した後、確定 をクリックします。
-
前の手順の [データベースアカウント名] を使用して、指定されたデータベースエンドポイントに接続します。SQL ステートメントをブロックするには、ステートメントの前に
ヒントコマンド/* store_to_blacklist */を追加します。たとえば、SQL ステートメントselect id from sqlblack_test where id = 1;をブロックするには、次のコマンドを実行します:/* store_to_blacklist */ select id from sqlblack_test where id = 1;パラメータ化されたテンプレートは次のとおりです:
select id from sqlblack_test where id = ?このテンプレートでは、
?は任意の値を示します。約 5 秒後、プロキシはこのアカウントからテンプレートに一致するすべての SQL ステートメントをブロックします。次のエラーが返されます:
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 on blacklist bl_test.このメッセージの
bl_testは、ブラックリストルールの名前です。
説明-
MySQL コマンドラインクライアントを使用する場合、
-cオプションを追加する必要があります。そうしないと、ヒントコマンドは有効になりません。 -
ルールは約 5 秒後に有効になります。
-
-
カスタム SQL モード
-
カスタム SQL モード を選択した場合は、必須パラメータを設定します。詳細については、「SQL ファイアウォールルールのパラメータ」をご参照ください。
説明カスタム SQL モード を使用する場合、設定 でブロックルールを有効にする必要はありません。
-
ルールを設定した後、確定 をクリックします。
-
前の手順の [データベースアカウント名] を使用して、指定されたデータベースエンドポイントに接続します。SQL ステートメントをブロックするには、ステートメントの前に
ヒントコマンド/* original_store_to_blacklist */を追加します。たとえば、ステートメントupdate t set k = 2 where id = 2;をブロックするには、次のコマンドを実行します:/* original_store_to_blacklist */ update t set k = 2 where id = 2;約 5 秒後、このアカウントを使用して SQL ステートメント
update t set k = 2 where id = 2;をそのまま実行すると、プロキシはステートメントをブロックします。他の SQL ステートメントは影響を受けません。次のエラーが返されます: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 on blacklist bl_test.このメッセージの
bl_testは、ブラックリストルールの名前です。
説明-
MySQL コマンドラインクライアントを使用する場合、
-cオプションを追加する必要があります。そうしないと、ヒントコマンドは有効になりません。 -
ルールは約 5 秒後に有効になります。
-
-
ブラックリストルールの有効化または無効化
- PolarDB コンソールにログインします。
左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、そのIDをクリックします。
-
左側メニューで、 を選択します。
-
[SQL ファイアウォール] タブで、有効化または無効化するルールを見つけ、有効化/無効化 スイッチをクリックします。
説明リストで複数のルールを選択し、リストの下部にある 有効化 または 無効 をクリックして、一括で有効化または無効化することもできます。
-
表示される 有効化 または 無効 ダイアログボックスで、確定 をクリックします。
ブラックリストルールの変更
- PolarDB コンソールにログインします。
左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、そのIDをクリックします。
-
左側メニューで、 を選択します。
-
[SQL ファイアウォール] タブで、変更するルールを見つけ、操作 列の Modify をクリックします。ルールの変更 ダイアログボックスで、パラメータを変更します。パラメータの詳細については、「SQL ファイアウォールルールのパラメータ」をご参照ください。
説明ルールの [ルール名] は変更できません。
-
ルールを変更した後、はい をクリックします。
コンソールからは、カスタムパラメータ化 SQL モード を使用して作成されたルールのパラメータ化された SQL ステートメントや、カスタム SQL モード を使用して作成されたルールの特定の SQL ステートメントは変更できません。これらのステートメントを変更するには、データベーステーブルから削除して再度追加する必要があります。
ブラックリストルールの削除
- PolarDB コンソールにログインします。
左上隅で、クラスターがデプロイされているリージョンを選択します。
クラスターを見つけて、そのIDをクリックします。
-
左側メニューで、 を選択します。
-
[SQL ファイアウォール] タブで、削除するルールを見つけ、操作 列の 削除 をクリックします。
説明リストで複数のルールを選択し、リストの下部にある 削除 をクリックして、一括で削除することもできます。
-
表示される 削除 ダイアログボックスで、確定 をクリックします。
カスタムモードのルールの削除
-
カスタムパラメータ化 SQL モード のブラックリストルール
カスタムパラメータ化 SQL モード のブラックリストルールは、次のいずれかの方法で削除できます:
-
カスタムパラメータ化 SQL モード のブラックリストルールは、ブラックリストルールの有効化または無効化またはブラックリストルールの削除で削除できます。
説明コンソールでブラックリストルールを無効化するだけで、対応するパラメータ化された SQL ステートメントを
proxy_auditing.sql_listテーブルから削除しない場合、同じアカウントでルールを再度有効化すると、ルールは再び有効になります。 -
特権管理者アカウントを使用してエンドポイントのプライマリノードに接続し、
proxy_auditing.sql_listテーブルから対応する SQL ステートメントを削除します。約 5 秒後、プロキシはそのステートメントをブロックしなくなります。説明DROPコマンドを使用してテーブルを削除しないでください。
-
-
カスタム SQL モード のブラックリストルール
カスタム SQL モード のブラックリストルールは、次のいずれかの方法で削除できます:
-
カスタム SQL モード のブラックリストルールを管理するには、ブラックリストルールの有効化または無効化またはブラックリストルールの削除を実行できます。
説明コンソールでブラックリストルールを無効化するだけで、対応する SQL ステートメントを
proxy_auditing.org_sql_listテーブルから削除しない場合、同じアカウントでルールを再度有効化すると、ルールは再び有効になります。 -
特権管理者アカウントを使用してエンドポイントのプライマリノードに接続し、
proxy_auditing.org_sql_listテーブルから対応する SQL ステートメントを削除します。約 5 秒後、プロキシはそのステートメントをブロックしなくなります。説明DROPコマンドを使用してテーブルを削除しないでください。
-