188 DBMS_SQL_FIREWALL
DBMS_SQL_FIREWALLパッケージを使用すると、ユーザーをモニターして、該当するユーザーに対するSQLインジェクション攻撃を検出または防止できます。
この章のトピックは、次のとおりです:
188.1 DBMS_SQL_FIREWALLの概要
DBMS_SQL_FIREWALL PL/SQLパッケージを使用すると、SQLインジェクション攻撃を追跡およびブロックするSQL Firewallを管理できます。
DBMS_SQL_FIREWALLパッケージを使用すると、ユーザーのSQLアクティビティをキャプチャし、キャプチャしたSQLアクティビティから許可リスト(許可されたアクション)を作成した後、許可リストを適用して潜在的なSQLインジェクション攻撃を防止または検出できます。 SQL文に加えて、許可リストには、データベース接続で許可される一連のセッション・コンテキストであるコンテキスト・リストを含めることができます。 コンテキストの例としては、IPアドレスがあります。 Oracle Schedulerの実行時にSQL Firewallが実行されないように構成することもできます。これは、Oracle Scheduler操作が妨げられる可能性があるためです。 許可リストを有効にすると、ユーザーが実行するSQLはSQL Firewallによって監視されます。 ユーザーが実行するSQLで許可リストに含まれていないものは、SQLインジェクション攻撃とみなされます。 ユーザーがこれらのSQL操作の実行を続行できるようにSQL Firewallを構成することも、これらのアクティビティをブロックすることもできます。 許可リストに違反するSQL操作は常にログ表に書き込まれ、データ・ディクショナリ・ビューを使用して問い合せることができます。
SQL Firewallは、ルートと個々のプラガブル・データベース(PDB)の両方で構成できます。
188.2 DBMS_SQL_FIREWALLのセキュリティ・モデル
Oracle Databaseは、SYSスキーマ内の表にメタデータを格納することで、SQL Firewallの管理を保護します。
したがって、これらの表は、SYSの他のディクショナリ表と同様に、ディクショナリ保護に依存します。 そのため、SELECT ANY TABLEシステム権限を持つユーザーは、SELECT ANY DICTIONARYシステム権限も持つか、表に対するSELECTオブジェクト権限が付与されていないかぎり、これらの表を問い合せることはできません。 これらの権限を他のユーザーに付与できるのは、SYSユーザーのみです。
Oracle Databaseでは、SQL Firewall表がデフォルトでSYSAUX表領域に格納されます。 SQL Firewallログ表を別の(ユーザー定義の)表領域に移動する場合は、まずSQL Firewallを無効にしてから、ALTER TABLE文のMOVE句を使用して移動操作を実行する必要があります。
DBMS_SQL_FIREWALLパッケージのプロシージャを使用するには、ユーザーにSQL_FIREWALL_ADMINロールが付与されている必要があります。
188.3 DBMS_SQL_FIREWALLの定数
DBMS_SQL_FIREWALLパッケージは、複数のSQL Firewallプロシージャで使用される定数を提供します。
これらの定数を、次の表に示します。
表188-1 DBMS_SQL_FIREWALL定数
| 名前 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NUMBER |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストを取得して適用するかどうかを示します。 この定数は、 |
|
|
|
|
|
188.4 DBMS_SQL_FIREWALLサブプログラムの要約
この表は、DBMS_SQL_FIREWALLパッケージのサブプログラムについて説明しています。
表188-2 DBMS_SQL_FIREWALLパッケージ・サブプログラム
| サブプログラム | 説明 |
|---|---|
|
SQL Firewallに構成されているユーザーに対して許可されるコンテキストのリストにコンテキストを追加します |
|
|
ユーザーの既存のキャプチャ・ログまたは違反ログ(あるいはその両方)を使用して、既存の許可リストにコンテンツを追加します |
|
|
違反ログまたは取得ログへの単一のSQLレコードを既存の許可リストに追加します |
|
|
指定されたユーザーの特定のレベルのSQL Firewallキャプチャを作成します |
|
|
ユーザーに割り当てられているSQL Firewallコンテキスト値を削除します |
|
|
ユーザーに割り当てられている許可されたSQLから、指定されたエントリを削除します |
|
|
SQL Firewallを無効にします |
|
|
指定されたユーザーのSQL Firewall許可リストの適用を無効にします |
|
|
指定されたユーザーのSQL Firewall許可リストを削除します |
|
|
SQL Firewallキャプチャを削除し、関連するすべてのキャプチャ・ログを削除します |
|
|
SQL Firewallを有効にします |
|
|
指定されたユーザーのSQL Firewall許可リストの適用を有効にします |
|
|
SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャまたは適用できないようにします |
|
|
特定のユーザーの許可リストを |
|
|
メモリーに存在するすべてのSQL Firewallログをログ表にフラッシュします |
|
|
ユーザーの既存のキャプチャ・ログのデータを使用して、指定されたユーザーのSQL Firewall許可リストを生成します |
|
|
指定された特定のユーザーの |
|
|
SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャおよび適用できるようにします |
|
|
SQL Firewallログをパージします |
|
|
ユーザーのSQL Firewallキャプチャを開始します |
|
|
ユーザーのSQL Firewallキャプチャを停止します |
|
|
指定されたユーザーのSQL Firewall許可リストの適用オプションを更新します |
188.4.1 ADD_ALLOWED_CONTEXTプロシージャ
このプロシージャは、ユーザーのSQL Firewall許可リストについて許可されたコンテキストのリストにコンテキストを追加します。
構文
DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXT ( username IN VARCHAR2, context_type IN NUMBER, value IN VARCHAR2);
パラメータ
表188-3 ADD_ALLOWED_CONTEXTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストを持つユーザーの名前を指定します。 許可リストを持つすべてのユーザーを確認するには、 |
|
|
次のいずれかのコンテキスト・タイプを指定します。
|
|
|
|
使用上のノート
-
次のデータ・ディクショナリ・ビューを問い合せることで、ユーザーの現在のコンテキスト・タイプ設定を確認できます。
DBA_SQL_FIREWALL_ALLOWED_IP_ADDRDBA_SQL_FIREWALL_ALLOWED_OS_PROGDBA_SQL_FIREWALL_ALLOWED_OS_USER
- ユーザーのコンテキストを追加する前に、ユーザーの許可リストを作成しておく必要があります(
DBMS_SQL_FIREWALL.GENERATE_ALLOW_LISTプロシージャを使用)。 - このプロシージャは、許可リストが有効なときにも無効なときにも実行でき、すぐに結果が反映されます。
例
BEGIN
DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXT (
username => 'PFITCH',
context_type => DBMS_SQL_FIREWALL.OS_PROGRAM,
value => 'SQL Developer'
);
END;
/188.4.2 APPEND_ALLOW_LISTプロシージャ
このプロシージャは、ユーザーの既存のキャプチャ・ログまたは違反ログ(あるいはその両方)を使用して、既存の許可リストにコンテンツを追加します。
構文
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST ( username IN VARCHAR2, source IN NUMBER);
パラメータ
表188-4 APPEND_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
|
|
次のいずれかのログ・タイプを指定します。
|
使用上のノート
DBMS_SQL_FIREWALL.APPEND_ALLOW_LISTは、指定されたソース・ログを処理し、許可リストに追加されるコンテンツを識別します。 次に、許可リストの適用中に使用される、許可されたSQLおよび許可されたコンテキストのSQL Firewallメタデータ表を設定します。- このプロシージャは、許可リストが有効なときにも無効なときにも実行できます。
- 変更は即座に反映されます。
- 同じ
DBMS_SQL_FIREWALL.APPEND_ALLOW_LISTの実行によって追加された、許可されたSQLエントリすべてに新しい許可リスト・バージョン番号が関連付けられます。 この新しいバージョン番号は、1に、指定されたユーザーの現在の最大許可リスト・バージョンを加えたものになります。
例
BEGIN
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST (
username => 'PFITCH',
source => DBMS_SQL_FIREWALL.CAPTURE_LOG
);
END;
/188.4.3 APPEND_ALLOW_LIST_SINGLE_SQLプロシージャ
このプロシージャは、違反ログまたは取得ログへの単一のSQLレコードを既存の許可リストに追加します。
このプロシージャは、違反ログまたは取得ログから既存の許可リストにSQLコマンドを個別に追加する場合に便利です。
構文
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST_SINGLE_SQL ( username IN VARCHAR2, sql_signature IN VARCHAR2, current_user IN VARCHAR2, top_level IN VARCHAR2, source IN NUMBER DEFAULT);
パラメータ
表188-5 APPEND_ALLOW_LIST_SINGLE_SQLプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
|
|
追加するSQLのシグネチャを指定します。 ターゲット・レコードのSQLのシグネチャを検索するには、動的ビューの |
|
|
SQLコマンドを実行したユーザーの名前を指定します。 たとえば、ユーザーpfitchがpsmithスキーマ内に作成された定義者権限のプロシージャを起動した場合、そのプロシージャ内のすべてのSQLコマンドは、psmithとして実行され、それがcurrent_userです。 そのプロシージャが起動者権限のプロシージャの場合、current_userは起動者のpfitchになります。
|
|
|
実行されたSQLが最上位レベルであったかどうかを指定します。 次の値があります。
|
|
|
追加するSQLレコードのソース・ログを指定します:
|
使用上のノート
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST_SINGLE_SQLは、指定されたソース・ログを処理し、許可リストに追加するターゲットSQLレコードを特定します。 次に、許可されたSQLのSQL Firewallメタデータ表を設定します。これは、許可リストの適用中に使用されます。- このプロシージャは、許可リストが有効なときにも無効なときにも実行できます。
- 変更は即座に反映されます。
- 新しい許可リストのバージョン番号が、新しく追加した許可されたSQLのエントリに関連付けられます。
例
- データ・ディクショナリ・ビューの
DBA_SQL_FIREWALL_VIOLATIONSまたはDBA_SQL_FIREWALL_CAPTURE_LOGSを問い合せて、許可リストに追加するターゲットSQLレコードを検索します。ターゲットSQLレコードの
USERNAME列、SQL_SIGNATURE列、CURRENT_USER列およびTOP_LEVEL列の値を取得します。 - これらの値を
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST_SINGLE_SQLSQLプロシージャに入力して、ターゲットSQLレコードを許可リストに追加します。例:
BEGIN DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST_SINGLE_SQL ( username => 'PFITCH', sql_signature => '7D33A84D0A1B56E382B9A92D01BCD19933969CB16E2AB4934A2258563F5ADB44', current_user => 'PSMITH', top_level => 'N', source => DBMS_SQL_FIREWALL.CAPTURE_LOG ); END; /
188.4.4 CREATE_CAPTUREプロシージャ
このプロシージャは、指定されたユーザーの特定のレベルのSQL Firewallキャプチャを作成します。
構文
DBMS_SQL_FIREWALL.CREATE_CAPTURE ( username IN VARCHAR2, top_level_only IN BOOLEAN, start_capture IN BOOLEAN);
パラメータ
表188-6 CREATE_CAPTUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewallキャプチャを作成するユーザーの名前を指定します。 既存のユーザーを確認するには、 |
|
|
|
|
|
|
使用上のノート
SQL Firewallキャプチャ用にすでに構成されているユーザーなど、既存のSQL Firewallキャプチャのステータスを確認するには、DBA_SQL_FIREWALL_CAPTURESデータ・ディクショナリ・ビューを問い合せます。
例
BEGIN
DBMS_SQL_FIREWALL.CREATE_CAPTURE (
username => 'C##HR_ADMIN',
top_level_only => TRUE,
start_capture => TRUE
);
END;
/188.4.5 DELETE_ALLOWED_CONTEXTプロシージャ
このプロシージャは、ユーザーのSQL Firewall許可リストについて許可されたコンテキストのリストからコンテキストを削除します。
構文
DBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXT ( username IN VARCHAR2, context_type IN NUMBER, value IN VARCHAR2);
パラメータ
表188-7 DELETE_ALLOWED_CONTEXTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
|
|
|
|
|
|
使用上のノート
- 次のデータ・ディクショナリ・ビューを問い合せることで、ユーザーの現在のコンテキスト・タイプ設定を確認できます。
DBA_SQL_FIREWALL_ALLOWED_IP_ADDRDBA_SQL_FIREWALL_ALLOWED_OS_PROGDBA_SQL_FIREWALL_ALLOWED_OS_USER
- このプロシージャは、許可リストが有効なときにも無効なときにも実行でき、すぐに結果が反映されます。
例
BEGIN
DBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXT, (
username => 'PFITCH',
context_type => DBMS_SQL_FIREWALL.OS_PROGRAM,
value => 'SQL Developer'
);
END;
/188.4.6 DELETE_ALLOWED_SQLプロシージャ
このプロシージャは、ユーザーのSQL Firewall許可リストについて許可されたSQLのリストから、指定されたエントリを削除します
構文
DBMS_SQL_FIREWALL.DELETE_ALLOWED_SQL ( username IN VARCHAR2, allowed_sql_id IN NUMBER);
パラメータ
表188-8 DELETE_ALLOWED_SQLプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
|
|
このユーザーの許可されたSQLから削除する、許可されたSQLエントリのIDを指定します。この値を確認するには、 |
使用上のノート
- このプロシージャは、許可リストが有効なときにも無効なときにも実行できます。
- 変更は即座に反映されます。
例
BEGIN
DBMS_SQL_FIREWALL.DELETE_ALLOWED_SQL (
username => 'PFITCH',
allowed_sql_id => 1
);
END;
/188.4.7 DISABLEプロシージャ
このプロシージャは、SQL Firewallを無効にし、有効になっている既存のキャブチャおよび許可リストをすべて停止します。
構文
DBMS_SQL_FIREWALL.DISABLE;
パラメータ
なし
使用上のノート
DBA_SQL_FIREWALL_STATUSデータ・ディクショナリ・ビューを問い合せることで、SQL Firewallの現在のステータスを確認できます。
例
EXEC DBMS_SQL_FIREWALL.DISABLE;188.4.8 DISABLE_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーのSQL Firewall許可リストの適用をただちに無効にします。
構文
DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST ( username IN VARCHAR2);
パラメータ
表188-9 DISABLE_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
使用上のノート
ユーザーの許可リストのステータスを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。
例
EXEC DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST ('PFITCH');188.4.9 DROP_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーのSQL Firewall許可リストを削除します。
構文
DBMS_SQL_FIREWALL.DROP_ALLOW_LIST ( username IN VARCHAR2);
パラメータ
表188-10 DROP_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
使用上のノート
-
ユーザーの許可リストのステータスを確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。 -
現在有効になっている許可リストは削除できません。 許可リストを無効にするには、
DBMS_SQL_FIREWALL.DISABLE_ALLOW_LISTプロシージャを実行します。
例
EXEC DBMS_SQL_FIREWALL.DROP_ALLOW_LIST ('PFITCH');188.4.10 DROP_CAPTUREプロシージャ
このプロシージャは、SQL Firewallキャプチャを削除し、関連するすべてのキャプチャ・ログを削除します。
構文
DBMS_SQL_FIREWALL.DROP_CAPTURE ( username IN VARCHAR2);
パラメータ
表188-11 DROP_CAPTUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewallキャプチャを削除するユーザーの名前を指定します。 このユーザーを確認するには、 |
使用上のノート
-
既存のSQL Firewallキャプチャのステータスを確認するには、
DBA_SQL_FIREWALL_CAPTURESデータ・ディクショナリ・ビューを問い合せます。 -
現在実行中のキャプチャは削除できません。 キャプチャを停止するには、
DBMS_SQL_FIREWALL.STOP_CAPTUREプロシージャを実行します。 -
ユーザーのキャプチャを削除してもユーザーの許可リストには影響せず、キャプチャが削除された場合でも引き続き実行できます。 キャプチャおよび許可リストは個別のエンティティです。
例
EXEC DBMS_SQL_FIREWALL.DROP_CAPTURE ('C##HR_ADMIN');188.4.11 ENABLEプロシージャ
このプロシージャは、SQL Firewallを有効にし、有効にするように構成されている既存のキャブチャおよび許可リストをすべて開始します。
構文
DBMS_SQL_FIREWALL.ENABLE;
パラメータ
なし
使用上のノート
DBA_SQL_FIREWALL_STATUSデータ・ディクショナリ・ビューを問い合せることで、SQL Firewallの現在のステータスを確認できます。
例
EXEC DBMS_SQL_FIREWALL.ENABLE;188.4.12 ENABLE_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーのSQL Firewall許可リストの適用をただちに有効にします。
構文
DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST ( username IN VARCHAR2, enforce IN NUMBER, block IN BOOLEAN;
パラメータ
表188-12 ENABLE_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストを有効にするユーザーの名前を指定します。 このユーザーを確認するには、 |
|
|
|
|
|
|
使用上のノート
-
ユーザーの許可リストのステータスを確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。 -
SQL Firewallでは、
blockオプションの設定に関係なく、一致しないデータベース接続またはSQL文の違反ログが常に生成されます。
例
BEGIN
DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST (
username => 'PFITCH',
enforce => DBMS_SQL_FIREWALL.ENFORCE_SQL,
block => TRUE
);
END;
/188.4.13 EXCLUDEプロシージャ
このプロシージャは、SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャまたは適用できないようにします。
Oracle Schedulerジョブは、データベースで様々なメンテナンスのためによく使用されます。 クリティカル・ジョブを誤って中断すると、望ましくない結果になる可能性があります。 SQL文をキャプチャしたり、Oracle Schedulerジョブ・セッション中に実行される許可リストを適用しないようにSQL Firewallを構成できます。 このプロシージャは、SQL Firewallキャプチャおよび許可リストに構成されているすべてのユーザーに適用されます。 デフォルトでは、Oracle SchedulerジョブはSQL Firewall操作から除外されます。
構文
DBMS_SQL_FIREWALL.EXCLUDE ( FEATURE IN NUMBER);
パラメータ
表188-13 EXCLUDEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
この値には |
使用上のノート
-
Oracle Schedulerの操作中にSQL Firewallが適用されているかどうかのステータスを確認するには、
DBA_SQL_FIREWALL_STATUSデータ・ディクショナリ・ビューのEXCLUDE_JOBS列を問い合せます。 出力がYの場合、Oracle SchedulerジョブはSQL Firewall操作から除外されます。 -
Oracle FirewallをOracle Schedulerの操作中に実行できるようにするには、
DBMS_SQL_FIREWALL.INCLUDEプロシージャを実行します。
例
EXEC DBMS_SQL_FIREWALL.EXCLUDE (DBMS_SQL_FIREWALL.SCHEDULER_JOB);188.4.14 EXPORT_ALLOW_LISTプロシージャ
このプロシージャは、特定のユーザーの許可リストをallow_list引数で指定されたCLOBにJSON形式でエクスポートします。
構文
DBMS_SQL_FIREWALL.EXPORT_ALLOW_LIST ( username IN VARCHAR2, allow_list IN/OUT CLOB;
パラメータ
表188-14 EXPORT_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
許可リストが作成されているユーザーを指定します。 許可リストがあるユーザーを確認するには、 |
|
|
エクスポートされたallow-listの移動先にする |
使用上のノート
-
このプロシージャの実行前に、
CLOBを作成してAPIに渡しておく必要があります(たとえば、PL/SQLクライアントの場合はDBMS_LOB.CREATETEMPORARY、JDBC Javaクライアントの場合はOracleConnection.createClob()を使用します)。 -
このエクスポート操作には、許可リストの設定(
status、enforce、block、top_level_only、generated_onおよびstatus_updated_on timestamp)、許可されるSQLおよび許可されるコンテキストが含まれます。 また、このエクスポート操作には、すべての(許可されたSQLによって)参照されたSQLのログが含まれます。 -
DBMS_SQL_FIREWALL.EXPORT_ALLOW_LISTは、取得ログや違反ログをエクスポートしません。 -
ユーザーの許可リストのステータスを確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。 -
すべてのユーザーのキャプチャと許可リストが含まれるすべてのSQLファイアウォール・メタデータをエクスポートする場合は、
DBMS_SQL_FIREWALL.EXPORT_ALLOW_LISTを使用するかわりに、Oracle Data Pumpのexpdpコマンドでinclude=SQL_FIREWALL句を使用します。 Oracle Databaseセキュリティ・ガイドを参照してください。
例
BEGIN
DBMS_SQL_FIREWALL.EXPORT_ALLOW_LIST (
username => 'PFITCH',
allow_list => ALLOW_LIST_CLOB;
);
END;
/188.4.15 FLUSH_LOGSプロシージャ
このプロシージャは、メモリーに存在するすべてのSQL Firewallログをログ表にフラッシュします。
構文
DBMS_SQL_FIREWALL.FLUSH_LOGS;
パラメータ
なし
使用上のノート
- メモリー内のログはバックグラウンドで頻繁にログ表にフラッシュされるため、通常はこのプロシージャを明示的に起動する必要はありません。 ただし、SQL Firewallの実行中、アクションの直後にキャプチャ・ログまたは違反ログを表示する場合は、ログを確認する前にこのプロシージャを実行できます。
DBMS_SQL_FIREWALL.FLUSH_LOGSプロシージャは、DBMS_MEMOPTIMIZE_ADMIN.WRITES_FLUSHプロシージャと同等です。 (「WRITES_FLUSHプロシージャ」を参照してください。)
例
EXEC DBMS_SQL_FIREWALL.FLUSH_LOGS;188.4.16 GENERATE_ALLOW_LISTプロシージャ
このプロシージャは、ユーザーの既存のキャプチャ・ログを使用して、指定されたユーザーのSQL Firewall許可リストを生成します。
構文
DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST ( username IN VARCHAR2;
パラメータ
表188-15 GENERATE_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
使用上のノート
- 既存の生成済許可リストに関する情報を確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。 - このプロシージャを実行する前に、次のコンポーネントが必要です。
- 指定されたユーザーが存在すること。
- このユーザーのキャプチャが作成されていること(
DBMS_SQL_FIREWALL.CREATE_CAPTUREを使用)。 ユーザーの許可リストを生成する前に、このキャプチャを無効にしておく必要があります(DBMS_SQL_FIREWALL.STOP_CAPTUREを使用)。 - ユーザーの許可リストがまだ存在しないこと。
例
EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST ('PFITCH');188.4.17 IMPORT_ALLOW_LISTプロシージャ
このプロシージャは、指定された特定のユーザーのCLOBからターゲット・データベースにallow-listをインポートします。
構文
DBMS_SQL_FIREWALL.IMPORT_ALLOW_LIST ( username IN VARCHAR2, allow_list IN CLOB;
パラメータ
表188-16 IMPORT_ALLOW_LISTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
エクスポートされたallow-listのユーザーを指定します。 このユーザーにターゲット・データベースですでに許可リストが作成されているかどうかを確認するには、 |
|
|
|
使用上のノート
-
このユーザーの許可リストがターゲット・データベースにない場合は、JSONペイロードのallow-listを使用して、このユーザー用の新しいallow-listが作成されます。 新しい許可リストの設定(
status、top_level_only、enforce、block、generated_on、status_updated_on)、許可されたコンテキストおよび許可されたSQLはJSONのものと同じになります。 指定されたユーザーの許可リストがすでにターゲット・データベースにある場合、既存の許可リストのすべての設定(status、top_level_only、enforce、blockおよび各種タイムスタンプ)は変更されませんが、許可されたSQLと許可されたコンテキストのみがJSONから既存の許可リストの設定にマージされます。 -
また、このインポート操作には、すべての(許可されたSQLによって)参照されたSQLのログが含まれます。
-
ユーザーの許可リストのステータスを確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。 -
キャプチャと許可リストが含まれるすべてのSQLファイアウォール・メタデータをインポートする場合は、
DBMS_SQL_FIREWALL.IMPORT_ALLOW_LISTを使用するかわりに、Oracle Data Pumpのimpdpコマンドでinclude=SQL_FIREWALL句を使用します。 Oracle Databaseセキュリティ・ガイドを参照してください。
例
BEGIN
DBMS_SQL_FIREWALL.IMPORT_ALLOW_LIST (
username => 'PFITCH',
allow_list => ALLOW_LIST_CLOB;
);
END;
/188.4.18 INCLUDEプロシージャ
このプロシージャは、SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャおよび適用できるようにします。
構文
DBMS_SQL_FIREWALL.INCLUDE ( FEATURE IN NUMBER);
パラメータ
表188-17 INCLUDEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
この値には |
使用上のノート
-
Oracle Schedulerの操作中にSQL Firewallが適用されているかどうかのステータスを確認するには、
DBA_SQL_FIREWALL_STATUSデータ・ディクショナリ・ビューのEXCLUDE_JOBS列を問い合せます。 出力がNの場合、SQL FirewallはOracle Schedulerの操作中に実行できます。 -
Oracle Schedulerの操作中にSQL Firewallが実行されないようにするには、
DBMS_SQL_FIREWALL.EXCLUDEプロシージャを実行します。
例
EXEC DBMS_SQL_FIREWALL.INCLUDE (DBMS_SQL_FIREWALL.SCHEDULER_JOB);188.4.19 PURGE_LOGプロシージャ
このプロシージャは、指定されたパージ時間に基づいて、指定されたユーザーに属するSQL Firewallログ(つまり、指定されたパージ時間より前に生成されたログ)をパージします。
構文
BEGIN
DBMS_SQL_FIREWALL.PURGE_LOG (
username IN VARCHAR2,
purge_time IN TIMESTAMP WITH TIME ZONE,
log_type IN NUMBER);
パラメータ
表188-18 PURGE_LOGプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
キャプチャ・ログまたは違反ログをパージするユーザーを指定します。 キャプチャ・ログを表示するには、 |
|
|
特定の時間より前に生成されたログのみをパージするように指定できるタイムスタンプ( |
|
|
パージするログのタイプを指定します。
|
使用上のノート
SQLファイアウォールのログに関する情報を確認するには、DBA_SQL_FIREWALL_VIOLATIONSデータ・ディクショナリ・ビューを問い合せます。
例
BEGIN
DBMS_SQL_FIREWALL.PURGE_LOG (
username => 'PSMITH',
purge_time => TO_TIMESTAMP_TZ('23-JAN-22 18.44.42 -07:00', 'DD/MM/YY HH24:MI:SS TZH:TZM'),
log_type => DBMS_SQL_FIREWALL.VIOLATION_LOG
);
END;
/188.4.20 START_CAPTUREプロシージャ
このプロシージャは、ユーザーのSQL Firewallキャプチャをただちに開始します。
構文
DBMS_SQL_FIREWALL.START_CAPTURE ( username IN VARCHAR2);
パラメータ
表188-19 START_CAPTUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewallキャプチャに指定されるユーザーの名前を指定します。 |
使用上のノート
-
ユーザーは、SQL Firewallキャプチャを1つのみ持つことができます。 ユーザーがすでにキャプチャに構成されているかどうかを確認するには、
DBA_SQL_FIREWALL_CAPTURESデータ・ディクショナリ・ビューを問い合せます。 -
キャプチャ・プロセスを開始すると、ユーザーが入力したすべてのSQLがSQL Firewallキャプチャ・ログ表にキャプチャされます。
DBA_SQL_FIREWALL_CAPTURE_LOGSデータ・ディクショナリ・ビューを問い合せることで、このSQLを定期的に確認できます。
例
EXEC DBMS_SQL_FIREWALL.START_CAPTURE ('PFITCH');188.4.21 STOP_CAPTUREプロシージャ
このプロシージャは、ユーザーのSQL Firewallキャプチャをただちに停止します。
構文
DBMS_SQL_FIREWALL.STOP_CAPTURE ( username IN VARCHAR2);
パラメータ
表188-20 STOP_CAPTUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL Firewallキャプチャに指定されたユーザーの名前を指定します。 このユーザーを確認するには、 |
使用上のノート
-
このプロシージャを実行する前に、キャプチャ・プロセスが現在実行されている必要があります。
DBA_SQL_FIREWALL_CAPTURESデータ・ディクショナリ・ビューを問い合せることで、そのステータスを確認できます。 -
キャプチャ・プロセスを停止した後、
DBMS_SQL_FIREWALL.GENERATE_ALLOW_LISTプロシージャを実行してユーザーの許可リストを生成できます。
例
EXEC DBMS_SQL_FIREWALL.STOP_CAPTURE ('PFITCH');188.4.22 UPDATE_ALLOW_LIST_ENFORCEMENTプロシージャ
このプロシージャは、指定されたユーザーのSQL Firewall許可リストの適用オプションをただちに更新します。
構文
BEGIN
DBMS_SQL_FIREWALL.UPDATE_ALLOW_LIST_ENFORCEMENT (
username IN VARCHAR2,
enforce IN NUMBER,
block IN BOOLEAN);
パラメータ
表188-21 UPDATE_ALLOW_LIST_ENFORCEMENTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
許可リストが生成されているユーザーの名前を指定します。 このユーザーを確認するには、 |
|
|
|
|
|
|
使用上のノート
ユーザーの許可リストのステータスを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。
例
BEGIN
DBMS_SQL_FIREWALL.UPDATE_ALLOW_LIST_ENFORCEMENT (
username => 'PFITCH',
enforce => DBMS_SQL_FIREWALL.ENFORCE_SQL,
block => TRUE
);
END;
/