次の各セクションでは、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 ストアドプロシージャは、ファイアウォールへのプロファイルの登録、操作モードの確立、キャッシュと永続記憶域間のファイアウォールデータの転送の管理などのタスクを実行します。 これらのプロシージャは、下位レベルのタスク用の 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 ユーザー定義関数 (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';
-
この 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 は、その他のファイアウォール操作を実行します:
-
この UDF は、いくつかのファイアウォールステータス変数を 0 にリセットします:
Firewall_access_denied
Firewall_access_granted
Firewall_access_suspicious
この UDF には、
FIREWALL_ADMIN
権限または非推奨のSUPER
権限が必要です。例:
SELECT mysql_firewall_flush_status();
-
この UDF は、SQL ステートメントを許可リストルールに使用されるダイジェストフォームに正規化します。
FIREWALL_ADMIN
権限または非推奨のSUPER
権限が必要です。例:
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
注記STATEMENT_DIGEST_TEXT()
SQL 関数を使用して、ファイアウォールコンテキストの外部で同じダイジェスト機能を使用できます。
MySQL Enterprise Firewall は、次のシステム変数をサポートしています。 これらを使用してファイアウォール操作を構成します。 これらの変数は、ファイアウォールがインストールされていないかぎり使用できません (セクション6.4.7.2「MySQL Enterprise Firewall のインストールまたはアンインストール」 を参照)。
-
コマンド行形式 --mysql-firewall-mode[={OFF|ON}]
システム変数 mysql_firewall_mode
スコープ グローバル 動的 はい SET_VAR
ヒントの適用いいえ 型 Boolean デフォルト値 ON
MySQL Enterprise Firewall が有効 (デフォルト) か無効か。
-
コマンド行形式 --mysql-firewall-trace[={OFF|ON}]
システム変数 mysql_firewall_trace
スコープ グローバル 動的 はい SET_VAR
ヒントの適用いいえ 型 Boolean デフォルト値 OFF
MySQL Enterprise Firewall トレースが有効か無効か (デフォルト)。
mysql_firewall_trace
が有効な場合、PROTECTING
モードでは、ファイアウォールは拒否されたステートメントをエラーログに書き込みます。
MySQL Enterprise Firewall では、次のステータス変数がサポートされます。 これらを使用して、ファイアウォールの操作ステータスに関する情報を取得します。 これらの変数は、ファイアウォールがインストールされていないかぎり使用できません (セクション6.4.7.2「MySQL Enterprise Firewall のインストールまたはアンインストール」 を参照)。 MYSQL_FIREWALL
プラグインがインストールされるか、サーバーが起動されるたびに、ファイアウォールステータス変数は 0 に設定されます。 これらの多くは、mysql_firewall_flush_status()
UDF によってゼロにリセットされます (MySQL Enterprise Firewall のユーザー定義関数 を参照)。