Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

6.4.7.4 MySQL Enterprise Firewall リファレンス

次の各セクションでは、MySQL Enterprise Firewall 要素のリファレンスを示します:

MySQL Enterprise Firewall テーブル

MySQL Enterprise Firewall では、アカウントごとおよびグループごとにプロファイル情報が保持されます。 mysql システムデータベース内のテーブルを永続記憶域に使用し、INFORMATION_SCHEMA テーブルまたは「パフォーマンススキーマ」テーブルを使用してメモリー内にキャッシュされたデータを表示します。 有効にすると、ファイアウォールはキャッシュされたデータに基づいて操作上の決定を行います。

ファイアウォールアカウントプロファイルテーブル

MySQL Enterprise Firewall では、永続記憶域の mysql システムデータベースのテーブルおよび INFORMATION_SCHEMA テーブルを使用してアカウントプロファイル情報を保持し、メモリー内にキャッシュされたデータのビューを提供します。

mysql システムデータベーステーブルにアクセスできるのは、そのテーブルに対する SELECT 権限を持つアカウントのみです。 INFORMATION_SCHEMA テーブルには、誰でもアクセスできます。

mysql.firewall_users テーブルには、登録済ファイアウォールアカウントプロファイルの名前と操作モードがリストされます。 テーブルには次のカラムがあります (対応する INFORMATION_SCHEMA.MYSQL_FIREWALL_USERS テーブルには類似したカラムがありますが、必ずしも同一ではありません):

  • USERHOST

    アカウントプロファイル名。 各アカウント名の形式は user_name@host_name です。

  • MODE

    プロファイルの現在の操作モード。 許可されるモード値は、OFF, DETECTING, PROTECTING, RECORDING および RESET です。 意味の詳細は、ファイアウォール操作の概念 を参照してください。

mysql.firewall_whitelist テーブルには、登録済ファイアウォールアカウントプロファイルの許可リストルールがリストされます。 テーブルには次のカラムがあります (対応する INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELIST テーブルには類似したカラムがありますが、必ずしも同一ではありません):

  • USERHOST

    アカウントプロファイル名。 各アカウント名の形式は user_name@host_name です。

  • RULE

    プロファイルの許容可能なステートメントパターンを示す正規化されたステートメント。 プロファイル許可リストは、そのルールの和集合です。

  • ID

    テーブルの主キーである整数カラム。 このカラムは、MySQL 8.0.12 で追加されました。

ファイアウォールグループプロファイルテーブル

MySQL 8.0.23 の時点では、MySQL Enterprise Firewall は、永続記憶域用の mysql システムデータベースのテーブルおよび「パフォーマンススキーマ」テーブルを使用してグループプロファイル情報を保持し、メモリー内にキャッシュされたデータへのビューを提供します。

各システムおよび「パフォーマンススキーマ」テーブルには、そのシステムおよび「パフォーマンススキーマ」テーブルに対する SELECT 権限を持つアカウントのみがアクセスできます。

mysql.firewall_groups テーブルには、登録されているファイアウォールグループプロファイルの名前と動作モードが一覧表示されます。 テーブルには次のカラムがあります (対応するパフォーマンススキーマ firewall_groups テーブルには類似していますが、必ずしも同一ではありません):

  • NAME

    グループプロファイル名。

  • MODE

    プロファイルの現在の操作モード。 許可されるモード値は、OFF, DETECTING, PROTECTING および RECORDING です。 意味の詳細は、ファイアウォール操作の概念 を参照してください。

  • USERHOST

    プロファイルが RECORDING モードの場合に使用される、グループプロファイルのトレーニングアカウント。 値は、NULL または user_name@host_name 形式の NULL 以外のアカウントです:

    • 値が NULL の場合、ファイアウォールはグループのメンバーであるアカウントから受信したステートメントの許可リストルールを記録します。

    • 値が NULL 以外の場合、ファイアウォールは、指定されたアカウント (グループのメンバーである必要があります) から受信したステートメントの許可リストルールのみを記録します。

mysql.firewall_group_allowlist テーブルには、登録されているファイアウォールグループプロファイルの許可リストルールが一覧表示されます。 テーブルには次のカラムがあります (対応するパフォーマンススキーマ firewall_group_allowlist テーブルには類似していますが、必ずしも同一ではありません):

  • NAME

    グループプロファイル名。

  • RULE

    プロファイルの許容可能なステートメントパターンを示す正規化されたステートメント。 プロファイル許可リストは、そのルールの和集合です。

  • ID

    テーブルの主キーである整数カラム。

mysql.firewall_membership テーブルには、登録済のファイアウォールグループプロファイルのメンバー (アカウント) がリストされます。 テーブルには次のカラムがあります (対応するパフォーマンススキーマ firewall_membership テーブルには類似していますが、必ずしも同一ではありません):

  • GROUP_ID

    グループプロファイル名。

  • MEMBER_ID

    プロファイルのメンバーであるアカウントの名前。

MySQL Enterprise Firewall ストアドプロシージャ

MySQL Enterprise Firewall ストアドプロシージャは、ファイアウォールへのプロファイルの登録、操作モードの確立、キャッシュと永続記憶域間のファイアウォールデータの転送の管理などのタスクを実行します。 これらのプロシージャは、下位レベルのタスク用の API を提供するユーザー定義関数 (UDF) を起動します。

ファイアウォールストアドプロシージャは、mysql システムデータベースに作成されます。 ファイアウォールストアドプロシージャを起動するには、mysql がデフォルトのデータベースである間に起動するか、プロシージャ名をデータベース名で修飾します。 例:

CALL mysql.sp_set_firewall_mode(user, mode);
ファイアウォールアカウントプロファイルのストアドプロシージャー

次のストアドプロシージャは、ファイアウォールアカウントプロファイルに対して管理操作を実行します:

  • sp_reload_firewall_rules(user)

    このストアドプロシージャは、個々のアカウントプロファイルのファイアウォール操作を制御します。 この手順では、ファイアウォール UDF を使用して、mysql.firewall_whitelist テーブルに格納されているルールからアカウントプロファイルのメモリー内ルールをリロードします。

    引数:

    • user: 影響を受けるアカウントプロファイルの名前 (user_name@host_name 形式の文字列)。

    例:

    CALL mysql.sp_reload_firewall_rules('fwuser@localhost');
    警告

    このプロシージャは、永続ストレージからリロードする前にアカウントプロファイルのインメモリー許可リストルールをクリアし、プロファイルモードを OFF に設定します。 sp_reload_firewall_rules() コールの前にプロファイルモードが OFF でなかった場合は、ルールのリロード後に sp_set_firewall_mode() を使用して以前のモードをリストアします。 たとえば、プロファイルが PROTECTING モードであった場合、sp_reload_firewall_rules() をコールした後で true でなくなり、それを明示的に PROTECTING に再度設定する必要があります。

  • sp_set_firewall_mode(user, mode)

    このストアドプロシージャは、ファイアウォールにプロファイルを登録した後 (まだ登録されていない場合)、ファイアウォールアカウントプロファイルの操作モードを確立します。 この手順では、必要に応じてファイアウォール UDF を呼び出して、キャッシュと永続ストレージの間でファイアウォールデータを転送することもできます。 このプロシージャは、mysql_firewall_mode システム変数が OFF の場合でもコールできますが、プロファイルのモードを設定しても、ファイアウォールが有効になるまで操作上の影響はありません。

    引数:

    • user: 影響を受けるアカウントプロファイルの名前 (user_name@host_name 形式の文字列)。

    • mode: 文字列としてのプロファイルの操作モード。 許可されるモード値は、OFF, DETECTING, PROTECTING, RECORDING および RESET です。 意味の詳細は、ファイアウォール操作の概念 を参照してください。

    アカウントプロファイルを任意のモードに切り替えますが、RECORDING はファイアウォールキャッシュデータを、基礎となる永続的な記憶域を提供する mysql システムデータベーステーブルと同期します。 モードを OFF から RECORDING に切り替えると、mysql.firewall_whitelist テーブルからキャッシュに allowlist がリロードされます。

    アカウントプロファイルに空の許可リストがある場合、そのモードは PROTECTING に設定できません。これは、プロファイルがすべてのステートメントを拒否し、効果的にアカウントによるステートメントの実行を禁止するためです。 このようなモード設定の試行に応じて、ファイアウォールは SQL エラーとしてではなく結果セットとして返される診断メッセージを生成します:

    mysql> CALL mysql.sp_set_firewall_mode('a@b','PROTECTING');
    +----------------------------------------------------------------------+
    | set_firewall_mode(arg_userhost, arg_mode)                            |
    +----------------------------------------------------------------------+
    | ERROR: PROTECTING mode requested for a@b but the whitelist is empty. |
    +----------------------------------------------------------------------+
ファイアウォールグループプロファイルのストアドプロシージャ

これらのストアドプロシージャーは、ファイアウォールグループプロファイルに対して管理操作を実行します:

  • sp_firewall_group_delist(group, user)

    このストアドプロシージャは、ファイアウォールグループプロファイルからアカウントを削除します。

    コールが成功した場合、グループメンバーシップの変更は、インメモリーキャッシュと永続記憶域の両方に対して行われます。

    引数:

    • group: 影響を受けるグループプロファイルの名前。

    • user: 削除するアカウント (user_name@host_name 形式の文字列)。

    例:

    CALL sp_firewall_group_delist('g', 'fwuser@localhost');

    このプロシージャは、MySQL 8.0.23 で追加されました。

  • sp_firewall_group_enlist(group, user)

    このストアドプロシージャは、ファイアウォールグループプロファイルにアカウントを追加します。 アカウントをグループに追加する前に、アカウント自体をファイアウォールに登録する必要はありません。

    コールが成功した場合、グループメンバーシップの変更は、インメモリーキャッシュと永続記憶域の両方に対して行われます。

    引数:

    • group: 影響を受けるグループプロファイルの名前。

    • user: user_name@host_name 形式の文字列として追加するアカウント。

    例:

    CALL sp_firewall_group_enlist('g', 'fwuser@localhost');

    このプロシージャは、MySQL 8.0.23 で追加されました。

  • sp_reload_firewall_group_rules(group)

    このストアドプロシージャは、個々のグループプロファイルのファイアウォール操作を制御します。 この手順では、ファイアウォール UDF を使用して、mysql.firewall_group_allowlist テーブルに格納されているルールからグループプロファイルのインメモリールールをリロードします。

    引数:

    • group: 影響を受けるグループプロファイルの名前。

    例:

    CALL sp_reload_firewall_group_rules('myapp');
    警告

    このプロシージャは、永続記憶域からリロードする前にグループプロファイルインメモリー許可リストルールをクリアし、プロファイルモードを OFF に設定します。 sp_reload_firewall_group_rules() コールの前にプロファイルモードが OFF でなかった場合は、ルールのリロード後に sp_set_firewall_group_mode() を使用して以前のモードをリストアします。 たとえば、プロファイルが PROTECTING モードであった場合、sp_reload_firewall_group_rules() をコールした後で true でなくなり、それを明示的に PROTECTING に再度設定する必要があります。

    このプロシージャは、MySQL 8.0.23 で追加されました。

  • sp_set_firewall_group_mode(group, mode)

    このストアドプロシージャは、ファイアウォールにプロファイルを登録した後、ファイアウォールグループプロファイルの動作モードを確立します (まだ登録されていない場合)。 この手順では、必要に応じてファイアウォール UDF を呼び出して、キャッシュと永続ストレージの間でファイアウォールデータを転送することもできます。 このプロシージャは、mysql_firewall_mode システム変数が OFF の場合でもコールできますが、プロファイルのモードを設定しても、ファイアウォールが有効になるまで操作上の影響はありません。

    プロファイルが以前に存在していた場合、その記録制限は変更されません。 制限を設定またはクリアするには、かわりに sp_set_firewall_group_mode_and_user() をコールします。

    引数:

    • group: 影響を受けるグループプロファイルの名前。

    • mode: 文字列としてのプロファイルの操作モード。 許可されるモード値は、OFF, DETECTING, PROTECTING および RECORDING です。 意味の詳細は、ファイアウォール操作の概念 を参照してください。

    例:

    CALL sp_set_firewall_group_mode('myapp', 'PROTECTING');

    このプロシージャは、MySQL 8.0.23 で追加されました。

  • sp_set_firewall_group_mode_and_user(group, mode, user)

    このストアドプロシージャは、sp_set_firewall_group_mode() と同様に、グループをファイアウォールに登録し、その操作モードを確立しますが、グループが RECORDING モードの場合に使用するトレーニングアカウントも指定します。

    引数:

    • group: 影響を受けるグループプロファイルの名前。

    • mode: 文字列としてのプロファイルの操作モード。 許可されるモード値は、OFF, DETECTING, PROTECTING および RECORDING です。 意味の詳細は、ファイアウォール操作の概念 を参照してください。

    • user: プロファイルが RECORDING モードの場合に使用される、グループプロファイルのトレーニングアカウント。 値は、NULL または user_name@host_name 形式の NULL 以外のアカウントです:

      • 値が NULL の場合、ファイアウォールはグループのメンバーであるアカウントから受信したステートメントの許可リストルールを記録します。

      • 値が NULL 以外の場合、ファイアウォールは、指定されたアカウント (グループのメンバーである必要があります) から受信したステートメントの許可リストルールのみを記録します。

    例:

    CALL sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');

    このプロシージャは、MySQL 8.0.23 で追加されました。

MySQL Enterprise Firewall のユーザー定義関数

MySQL Enterprise Firewall ユーザー定義関数 (UDF) は、ファイアウォールキャッシュを基礎となるシステムテーブルと同期化するなどの下位レベルのタスク用の API を提供します。

通常の操作では、これらの UDF はユーザーによって直接ではなく、ファイアウォールストアドプロシージャによって起動されます。 そのため、これらの UDF の説明には、引数や戻り型に関する情報など、通常の詳細は含まれません。

ファイアウォールアカウントプロファイルのユーザー定義関数

次の UDF は、ファイアウォールアカウントプロファイルに対する管理操作を実行します:

  • read_firewall_users(user, mode)

    この集計 UDF は、mysql.firewall_users テーブルの SELECT ステートメントを使用してファイアウォールアカウントプロファイルキャッシュを更新します。 FIREWALL_ADMIN 権限または非推奨の SUPER 権限が必要です。

    例:

    SELECT read_firewall_users('fwuser@localhost', 'RECORDING')
    FROM mysql.firewall_users;
  • read_firewall_whitelist(user, rule)

    この集計 UDF は、mysql.firewall_whitelist テーブルの SELECT ステートメントを使用して、指定されたアカウントプロファイルの記録済ステートメントキャッシュを更新します。 FIREWALL_ADMIN 権限または非推奨の SUPER 権限が必要です。

    例:

    SELECT read_firewall_whitelist('fwuser@localhost', fw.rule)
    FROM mysql.firewall_whitelist AS fw
    WHERE USERHOST = 'fwuser@localhost';
  • set_firewall_mode(user, mode)

    この UDF は、アカウントプロファイルキャッシュを管理し、プロファイル操作モードを確立します。 FIREWALL_ADMIN 権限または非推奨の SUPER 権限が必要です。

    例:

    SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
ファイアウォールグループプロファイルのユーザー定義関数

これらの UDF は、ファイアウォールグループプロファイルに対して管理操作を実行します:

  • firewall_group_delist(group, user)

    この UDF は、グループプロファイルからアカウントを削除します。 FIREWALL_ADMIN 権限が必要です。

    例:

    SELECT firewall_group_delist('g', 'fwuser@localhost');

    この関数は、MySQL 8.0.23 で追加されました。

  • firewall_group_enlist(group, user)

    この UDF は、アカウントをグループプロファイルに追加します。 FIREWALL_ADMIN 権限が必要です。

    アカウントをグループに追加する前に、アカウント自体をファイアウォールに登録する必要はありません。

    例:

    SELECT firewall_group_enlist('g', 'fwuser@localhost');

    この関数は、MySQL 8.0.23 で追加されました。

  • read_firewall_group_allowlist(group, rule)

    この集計 UDF は、mysql.firewall_group_allowlist テーブルの SELECT ステートメントを介して、指定されたグループプロファイルの記録されたステートメントキャッシュを更新します。 FIREWALL_ADMIN 権限が必要です。

    例:

    SELECT read_firewall_group_allowlist('my_fw_group', fgw.rule)
    FROM mysql.firewall_group_allowlist AS fgw
    WHERE NAME = 'my_fw_group';

    この関数は、MySQL 8.0.23 で追加されました。

  • read_firewall_groups(group, mode, user)

    この集計 UDF は、mysql.firewall_groups テーブルの SELECT ステートメントを介してファイアウォールグループプロファイルキャッシュを更新します。 FIREWALL_ADMIN 権限が必要です。

    例:

    SELECT read_firewall_groups('g', 'RECORDING', 'fwuser@localhost')
    FROM mysql.firewall_groups;

    この関数は、MySQL 8.0.23 で追加されました。

  • set_firewall_group_mode(group, mode[, user])

    この UDF は、グループプロファイルキャッシュを管理し、プロファイル操作モードを確立し、オプションでプロファイルトレーニングアカウントを指定します。 FIREWALL_ADMIN 権限が必要です。

    オプションの user 引数が指定されていない場合、プロファイルの以前の user 設定は変更されません。 設定を変更するには、3 番目の引数を指定して UDF を呼び出します。

    オプションの user 引数が指定されている場合は、プロファイルが RECORDING モードのときに使用される、グループプロファイルのトレーニングアカウントを指定します。 値は、NULL または user_name@host_name 形式の NULL 以外のアカウントです:

    • 値が NULL の場合、ファイアウォールはグループのメンバーであるアカウントから受信したステートメントの許可リストルールを記録します。

    • 値が NULL 以外の場合、ファイアウォールは、指定されたアカウント (グループのメンバーである必要があります) から受信したステートメントの許可リストルールのみを記録します。

    例:

    SELECT set_firewall_group_mode('g', 'DETECTING');

    この関数は、MySQL 8.0.23 で追加されました。

ファイアウォールのその他のユーザー定義関数

次の UDF は、その他のファイアウォール操作を実行します:

  • mysql_firewall_flush_status()

    この UDF は、いくつかのファイアウォールステータス変数を 0 にリセットします:

    • Firewall_access_denied

    • Firewall_access_granted

    • Firewall_access_suspicious

    この UDF には、FIREWALL_ADMIN 権限または非推奨の SUPER 権限が必要です。

    例:

    SELECT mysql_firewall_flush_status();
  • normalize_statement(stmt)

    この UDF は、SQL ステートメントを許可リストルールに使用されるダイジェストフォームに正規化します。 FIREWALL_ADMIN 権限または非推奨の SUPER 権限が必要です。

    例:

    SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
    注記

    STATEMENT_DIGEST_TEXT() SQL 関数を使用して、ファイアウォールコンテキストの外部で同じダイジェスト機能を使用できます。

MySQL Enterprise Firewall システム変数

MySQL Enterprise Firewall は、次のシステム変数をサポートしています。 これらを使用してファイアウォール操作を構成します。 これらの変数は、ファイアウォールがインストールされていないかぎり使用できません (セクション6.4.7.2「MySQL Enterprise Firewall のインストールまたはアンインストール」 を参照)。

  • mysql_firewall_mode

    コマンド行形式 --mysql-firewall-mode[={OFF|ON}]
    システム変数 mysql_firewall_mode
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Boolean
    デフォルト値 ON

    MySQL Enterprise Firewall が有効 (デフォルト) か無効か。

  • mysql_firewall_trace

    コマンド行形式 --mysql-firewall-trace[={OFF|ON}]
    システム変数 mysql_firewall_trace
    スコープ グローバル
    動的 はい
    SET_VAR ヒントの適用 いいえ
    Boolean
    デフォルト値 OFF

    MySQL Enterprise Firewall トレースが有効か無効か (デフォルト)。 mysql_firewall_trace が有効な場合、PROTECTING モードでは、ファイアウォールは拒否されたステートメントをエラーログに書き込みます。

MySQL Enterprise Firewall ステータス変数

MySQL Enterprise Firewall では、次のステータス変数がサポートされます。 これらを使用して、ファイアウォールの操作ステータスに関する情報を取得します。 これらの変数は、ファイアウォールがインストールされていないかぎり使用できません (セクション6.4.7.2「MySQL Enterprise Firewall のインストールまたはアンインストール」 を参照)。 MYSQL_FIREWALL プラグインがインストールされるか、サーバーが起動されるたびに、ファイアウォールステータス変数は 0 に設定されます。 これらの多くは、mysql_firewall_flush_status() UDF によってゼロにリセットされます (MySQL Enterprise Firewall のユーザー定義関数 を参照)。

  • Firewall_access_denied

    MySQL Enterprise Firewall によって拒否されたステートメントの数。

  • Firewall_access_granted

    MySQL Enterprise Firewall で受け入れられるステートメントの数。

  • Firewall_access_suspicious

    DETECTING モードのユーザーの疑わしいステートメントとして MySQL Enterprise Firewall によって記録されたステートメントの数。

  • Firewall_cached_entries

    MySQL Enterprise Firewall によって記録されたステートメントの数 (重複を含む)。