B DBMS_SQL_FIREWALL
DBMS_SQL_FIREWALL
パッケージを使用すると、ユーザーをモニタリングし、そのユーザーに対するSQLインジェクション攻撃を検出または防止できます。
この章の内容は次のとおりです。
B.1 DBMS_SQL_FIREWALLの概要
DBMS_SQL_FIREWALL
PL/SQLパッケージを使用するとSQLファイアウォールを管理できるようになり、SQLインジェクション攻撃を追跡したり、ブロックすることが可能です。
DBMS_SQL_FIREWALL
パッケージを使用すると、ユーザーのSQLアクティビティをキャプチャし、キャプチャしたSQLアクティビティから許可リスト(許可されたアクション)を作成した後、許可リストを強制して潜在的なSQLインジェクション攻撃を防止または検出できます。SQL文に加えて、許可リストには、データベース接続に許可された一連のセッション・コンテキストであるコンテキスト・リストを含めることができます。コンテキストの例として、IPアドレスがあります。Oracle Schedulerの実行時にSQLファイアウォールが実行されないように構成することもできます。これは、Oracle Schedulerの操作が妨げられる可能性があるためです。許可リストを有効にすると、ユーザーが実行するSQLはSQLファイアウォールによってモニタリングされます。ユーザーが実行するSQLで許可リストに含まれていないものは、SQLインジェクション攻撃とみなされます。ユーザーがこれらのSQL操作の実行を続行できるようにSQLファイアウォールを構成することも、これらのアクティビティをブロックすることもできます。許可リストに違反するSQL操作は常にログ表に書き込まれ、データ・ディクショナリ・ビューを使用して問い合せることができます。
SQLファイアウォールは、ルートと個々のプラガブル・データベース(PDB)の両方で構成できます。
B.2 DBMS_SQL_FIREWALLのセキュリティ・モデル
Oracle Databaseは、SYS
スキーマ内の表にメタデータを格納することで、SQLファイアウォールの管理を保護します。
したがって、これらの表は、SYS
の他のディクショナリ表と同様に、ディクショナリ保護に依存します。そのため、SELECT ANY TABLE
システム権限を持つユーザーは、SELECT ANY DICTIONARY
システム権限も持っているか、表に対するSELECT
オブジェクト権限が付与されている場合を除き、これらの表を問い合せることはできません。これらの権限を他のユーザーに付与できるのは、SYS
ユーザーのみです。
Oracle Databaseでは、SQLファイアウォールの表はデフォルトでSYSAUX
表領域に格納されます。SQLファイアウォール・ログ表を別の(ユーザー定義の)表領域に移動する場合は、まずSQLファイアウォールを無効にしてから、ALTER TABLE
文のMOVE
句を使用して移動操作を実行する必要があります。
DBMS_SQL_FIREWALL
パッケージのプロシージャを使用するには、ユーザーにSQL_FIREWALL_ADMIN
ロールが付与されている必要があります。
B.3 DBMS_SQL_FIREWALLの定数
DBMS_SQL_FIREWALL
パッケージは、複数のSQLファイアウォール・プロシージャで使用される定数を提供します。
これらの定数を、次の表に示します。
表B-1 DBMS_SQL_FIREWALLの定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NUMBER |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SQLファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャおよび強制するかどうかを示します。この定数は、 |
|
|
|
|
B.4 DBMS_SQL_FIREWALLのサブプログラムの要約
この表には、DBMS_SQL_FIREWALL
パッケージのサブプログラムとその説明を示します。
表B-2 DBMS_SQL_FIREWALLパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
SQLファイアウォール用に構成されているユーザーに許可されたコンテキストのリストにコンテキストを追加します |
|
ユーザーの既存のキャプチャ・ログまたは違反ログ(あるいはその両方)を使用して、既存の許可リストにコンテンツを追加します |
|
違反ログまたはキャプチャ・ログへの単一のSQLレコードを既存の許可リストに追加します |
|
指定されたユーザーの特定のレベルのSQLファイアウォール・キャプチャを作成します |
|
ユーザーに割り当てられているSQLファイアウォール・コンテキスト値を削除します |
|
ユーザーに割り当てられている許可されたSQLから、指定されたエントリを削除します |
|
SQLファイアウォールを無効にします |
|
指定されたユーザーのSQLファイアウォール許可リストの強制を無効にします |
|
指定されたユーザーのSQLファイアウォール許可リストを削除します |
|
SQLファイアウォール・キャプチャを削除し、関連するすべてのキャプチャ・ログを削除します |
|
SQLファイアウォールを有効にします |
|
指定されたユーザーのSQLファイアウォール許可リストの強制を有効にします |
|
SQLファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャまたは適用できないようにします |
|
指定されたユーザーの許可リストを |
|
メモリーに存在するすべてのSQLファイアウォール・ログをログ表にフラッシュします |
|
ユーザーの既存のキャプチャ・ログのデータを使用して、指定されたユーザーのSQLファイアウォール許可リストを生成します |
|
特定のユーザーの指定された |
|
SQLファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャおよび強制できるようにします |
|
SQLファイアウォール・ログをパージします |
|
ユーザーのSQLファイアウォール・キャプチャを開始します |
|
ユーザーのSQLファイアウォール・キャプチャを停止します |
|
指定されたユーザーのSQLファイアウォール許可リストの強制オプションを更新します |
B.4.1 ADD_ALLOWED_CONTEXTプロシージャ
このプロシージャは、ユーザーのSQLファイアウォール許可リストに許可されたコンテキストのリストにコンテキストを追加します。
構文
DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXT ( username IN VARCHAR2, context_type IN NUMBER, value IN VARCHAR2);
パラメータ
表B-3 ADD_ALLOWED_CONTEXTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストがあるユーザーの名前を指定します。許可リストがあるすべてのユーザーを確認するには、 |
|
次のいずれかのコンテキスト・タイプを指定します:
|
|
|
使用上のノート
-
次のデータ・ディクショナリ・ビューを問い合せることで、ユーザーの現在のコンテキスト・タイプ設定を確認できます:
DBA_SQL_FIREWALL_ALLOWED_IP_ADDR
DBA_SQL_FIREWALL_ALLOWED_OS_PROG
DBA_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;
/
B.4.2 APPEND_ALLOW_LISTプロシージャ
このプロシージャは、ユーザーの既存のキャプチャ・ログまたは違反ログ(あるいはその両方)を使用して、既存の許可リストにコンテンツを追加します。
構文
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST ( username IN VARCHAR2, source IN NUMBER);
パラメータ
表B-4 APPEND_ALLOW_LISTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
|
次のいずれかのログ・タイプを指定します:
|
使用上のノート
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST
は、指定されたソース・ログを処理し、許可リストに追加するコンテンツを特定します。次に、許可リストの強制中に使用される、許可されたSQLおよび許可されたコンテキストのSQLファイアウォール・メタデータ表にデータを移入します。- このプロシージャは、許可リストが有効でも無効でも実行できます。
- 変更はすぐに有効になります。
- 新しい許可リスト・バージョン番号が、同じ
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST
の実行によって追加された、許可されたSQLエントリすべてに関連付けられます。この新しいバージョン番号は、1
に、指定されたユーザーの現在の最大許可リスト・バージョンを加えたものになります。
例
BEGIN
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST (
username => 'PFITCH',
source => DBMS_SQL_FIREWALL.CAPTURE_LOG
);
END;
/
B.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);
パラメータ
表B-5 APPEND_ALLOW_LIST_SINGLE_SQLプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
|
追加する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ファイアウォール・メタデータ表にデータを移入します。- このプロシージャは、許可リストが有効でも無効でも実行できます。
- 変更はすぐに有効になります。
- 新しい許可リスト・バージョン番号が、新たに追加された、許可された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_SQL
SQLプロシージャに入力して、ターゲット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; /
B.4.4 CREATE_CAPTUREプロシージャ
このプロシージャは、指定されたユーザーの特定のレベルのSQLファイアウォール・キャプチャを作成します。
構文
DBMS_SQL_FIREWALL.CREATE_CAPTURE ( username IN VARCHAR2, top_level_only IN BOOLEAN, start_capture IN BOOLEAN);
パラメータ
表B-6 CREATE_CAPTUREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール・キャプチャの作成対象となるユーザーの名前を指定します。既存のユーザーを確認するには、 |
|
|
|
|
使用上のノート
SQLファイアウォール・キャプチャ用にすでに構成されているユーザーなど、既存のSQLファイアウォール・キャプチャのステータスを確認するには、DBA_SQL_FIREWALL_CAPTURES
データ・ディクショナリ・ビューを問い合せます。
例
BEGIN
DBMS_SQL_FIREWALL.CREATE_CAPTURE (
username => 'C##HR_ADMIN',
top_level_only => TRUE,
start_capture => TRUE
);
END;
/
B.4.5 DELETE_ALLOWED_CONTEXTプロシージャ
このプロシージャは、ユーザーのSQLファイアウォール許可リストに許可されたコンテキストのリストからコンテキストを削除します。
構文
DBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXT ( username IN VARCHAR2, context_type IN NUMBER, value IN VARCHAR2);
パラメータ
表B-7 DELETE_ALLOWED_CONTEXTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
|
|
|
|
使用上のノート
- 次のデータ・ディクショナリ・ビューを問い合せることで、ユーザーの現在のコンテキスト・タイプ設定を確認できます:
DBA_SQL_FIREWALL_ALLOWED_IP_ADDR
DBA_SQL_FIREWALL_ALLOWED_OS_PROG
DBA_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;
/
B.4.6 DELETE_ALLOWED_SQLプロシージャ
このプロシージャは、ユーザーのSQLファイアウォール許可リストに許可されたSQLのリストから、指定されたエントリを削除します
構文
DBMS_SQL_FIREWALL.DELETE_ALLOWED_SQL ( username IN VARCHAR2, allowed_sql_id IN NUMBER);
パラメータ
表B-8 DELETE_ALLOWED_SQLプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
|
このユーザーの許可されたSQLから削除する、許可されたSQLエントリのIDを指定します。この値を確認するには、 |
使用上のノート
- このプロシージャは、許可リストが有効でも無効でも実行できます。
- 変更はすぐに有効になります。
例
BEGIN
DBMS_SQL_FIREWALL.DELETE_ALLOWED_SQL (
username => 'PFITCH',
allowed_sql_id => 1
);
END;
/
B.4.7 DISABLEプロシージャ
このプロシージャは、SQLファイアウォールを無効にし、有効になっている既存のキャブチャおよび許可リストをすべて停止します。
構文
DBMS_SQL_FIREWALL.DISABLE;
パラメータ
なし
使用上のノート
DBA_SQL_FIREWALL_STATUS
データ・ディクショナリ・ビューを問い合せることで、SQLファイアウォールの現在のステータスを確認できます。
例
EXEC DBMS_SQL_FIREWALL.DISABLE;
B.4.8 DISABLE_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーのSQLファイアウォール許可リストの強制をすぐに無効にします。
構文
DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST ( username IN VARCHAR2);
パラメータ
表B-9 DISABLE_ALLOW_LISTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
使用上のノート
ユーザーの許可リストのステータスを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTS
データ・ディクショナリ・ビューを問い合せます。
例
EXEC DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST ('PFITCH');
B.4.9 DROP_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーのSQLファイアウォール許可リストを削除します。
構文
DBMS_SQL_FIREWALL.DROP_ALLOW_LIST ( username IN VARCHAR2);
パラメータ
表B-10 DROP_ALLOW_LISTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
使用上のノート
-
ユーザーの許可リストのステータスを確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTS
データ・ディクショナリ・ビューを問い合せます。 -
現在有効になっている許可リストは削除できません。許可リストを無効にするには、
DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST
プロシージャを実行します。
例
EXEC DBMS_SQL_FIREWALL.DROP_ALLOW_LIST ('PFITCH');
B.4.10 DROP_CAPTUREプロシージャ
このプロシージャは、SQLファイアウォール・キャプチャを削除し、関連するすべてのキャプチャ・ログを削除します。
構文
DBMS_SQL_FIREWALL.DROP_CAPTURE ( username IN VARCHAR2);
パラメータ
表B-11 DROP_CAPTUREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール・キャプチャの削除対象となるユーザーの名前を指定します。このユーザーを確認するには、 |
使用上のノート
-
既存のSQLファイアウォール・キャプチャのステータスを確認するには、
DBA_SQL_FIREWALL_CAPTURES
データ・ディクショナリ・ビューを問い合せます。 -
現在実行中のキャプチャは削除できません。キャプチャを停止するには、
DBMS_SQL_FIREWALL.STOP_CAPTURE
プロシージャを実行します。 -
ユーザーのキャプチャを削除してもユーザーの許可リストには影響せず、キャプチャが削除された場合でも引き続き実行できます。キャプチャと許可リストは別個のエンティティです。
例
EXEC DBMS_SQL_FIREWALL.DROP_CAPTURE ('C##HR_ADMIN');
B.4.11 ENABLEプロシージャ
このプロシージャは、SQLファイアウォールを有効にし、有効になるように構成されている既存のキャブチャおよび許可リストをすべて開始します。
構文
DBMS_SQL_FIREWALL.ENABLE;
パラメータ
なし
使用上のノート
DBA_SQL_FIREWALL_STATUS
データ・ディクショナリ・ビューを問い合せることで、SQLファイアウォールの現在のステータスを確認できます。
例
EXEC DBMS_SQL_FIREWALL.ENABLE;
B.4.12 ENABLE_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーのSQLファイアウォール許可リストの強制をすぐに有効にします。
構文
DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST ( username IN VARCHAR2, enforce IN NUMBER, block IN BOOLEAN;
パラメータ
表B-12 ENABLE_ALLOW_LISTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストの有効化対象となるユーザーの名前を指定します。このユーザーを確認するには、 |
|
|
|
|
使用上のノート
-
ユーザーの許可リストのステータスを確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTS
データ・ディクショナリ・ビューを問い合せます。 -
SQLファイアウォールでは、
block
オプション設定に関係なく、一致しないデータベース接続またはSQL文について違反ログが常に生成されます。
例
BEGIN
DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST (
username => 'PFITCH',
enforce => DBMS_SQL_FIREWALL.ENFORCE_SQL,
block => TRUE
);
END;
/
B.4.13 EXCLUDEプロシージャ
このプロシージャは、SQLファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャまたは適用できないようにします。
Oracle Schedulerジョブは、データベースで様々なメンテナンスのためによく使用されます。クリティカル・ジョブを誤って中断すると、望ましくない結果になる可能性があります。Oracle Schedulerジョブ・セッション中に実行されるSQL文のキャプチャも許可リストの強制も実行しないようにSQLファイアウォールを構成できます。このプロシージャは、SQLファイアウォール・キャプチャおよび許可リスト用に構成されているすべてのユーザーに適用されます。デフォルトでは、Oracle SchedulerジョブはSQLファイアウォールの操作から除外されます。
構文
DBMS_SQL_FIREWALL.EXCLUDE ( FEATURE IN NUMBER);
パラメータ
表B-13 EXCLUDEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
この値には |
使用上のノート
-
Oracle Schedulerの操作中にSQLファイアウォールが強制されるかどうかのステータスを確認するには、
DBA_SQL_FIREWALL_STATUS
データ・ディクショナリ・ビューのEXCLUDE_JOBS
列を問い合せます。出力がY
の場合、Oracle SchedulerジョブはSQLファイアウォールの操作から除外されます。 -
Oracle FirewallをOracle Schedulerの操作中に実行できるようにするには、
DBMS_SQL_FIREWALL.INCLUDE
プロシージャを実行します。
例
EXEC DBMS_SQL_FIREWALL.EXCLUDE (DBMS_SQL_FIREWALL.SCHEDULER_JOB);
B.4.14 EXPORT_ALLOW_LISTプロシージャ
このプロシージャは、指定されたユーザーの許可リストをallow_list
引数で指定されたCLOBにJSON形式でエクスポートします。
構文
DBMS_SQL_FIREWALL.EXPORT_ALLOW_LIST ( username IN VARCHAR2, allow_list IN/OUT CLOB;
パラメータ
表B-14 EXPORT_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;
/
B.4.15 FLUSH_LOGSプロシージャ
このプロシージャは、メモリーに存在するすべてのSQLファイアウォール・ログをログ表にフラッシュします。
構文
DBMS_SQL_FIREWALL.FLUSH_LOGS;
パラメータ
なし
使用上のノート
- メモリー内のログはバックグラウンドで頻繁にログ表にフラッシュされるため、通常はこのプロシージャを明示的に起動する必要はありません。ただし、SQLファイアウォールの実行中、アクションの直後にキャプチャ・ログまたは違反ログを表示する場合は、ログを確認する前にこのプロシージャを実行できます。
DBMS_SQL_FIREWALL.FLUSH_LOGS
プロシージャは、DBMS_MEMOPTIMIZE_ADMIN.WRITES_FLUSH
プロシージャと同等です。(WRITES_FLUSHプロシージャを参照してください。)
例
EXEC DBMS_SQL_FIREWALL.FLUSH_LOGS;
B.4.16 GENERATE_ALLOW_LISTプロシージャ
このプロシージャは、ユーザーの既存のキャプチャ・ログを使用して、指定されたユーザーのSQLファイアウォール許可リストを生成します。
構文
DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST ( username IN VARCHAR2;
パラメータ
表B-15 GENERATE_ALLOW_LISTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
使用上のノート
- 既存の生成済許可リストに関する情報を確認するには、
DBA_SQL_FIREWALL_ALLOW_LISTS
データ・ディクショナリ・ビューを問い合せます。 - このプロシージャを実行する前に、次のコンポーネントの準備が必要です:
- 指定されたユーザーが存在すること。
- このユーザーのキャプチャが作成されていること(
DBMS_SQL_FIREWALL.CREATE_CAPTURE
を使用)。ユーザーの許可リストを生成する前に、このキャプチャを無効にしておくこと(DBMS_SQL_FIREWALL.STOP_CAPTURE
を使用)。 - ユーザーの許可リストがまだ存在しないこと。
例
EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST ('PFITCH');
B.4.17 IMPORT_ALLOW_LISTプロシージャ
このプロシージャは、特定のユーザーの指定されたCLOB
からターゲット・データベースに許可リストをインポートします。
構文
DBMS_SQL_FIREWALL.IMPORT_ALLOW_LIST ( username IN VARCHAR2, allow_list IN CLOB;
パラメータ
表B-16 IMPORT_ALLOW_LISTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
エクスポートされた許可リストのユーザーを指定します。このユーザーにターゲット・データベースですでに許可リストが作成されているかどうかを確認するには、 |
|
|
使用上のノート
-
このユーザーの許可リストがターゲット・データベースにない場合は、JSONペイロードの許可リストを使用して、このユーザーに新しい許可リストが作成されます。新しい許可リストの設定(
status
、top_level_only
、enforce
、block
、generated_on
、status_updated_on
)、許可されたコンテキストおよび許可されたSQLはJSONのものと同じになります。指定されたユーザーの許可リストがすでにターゲット・データベースにある場合、既存の許可リストのすべての設定(status
、top_level_only
、enforce
、block
および各種タイムスタンプ)は変更されませんが、JSONの許可されたSQLおよび許可されたコンテキストのみが既存の許可リストのものとマージされます。 -
また、このインポート操作には、すべての(許可された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;
/
B.4.18 INCLUDEプロシージャ
このプロシージャは、SQLファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャおよび強制できるようにします。
構文
DBMS_SQL_FIREWALL.INCLUDE ( FEATURE IN NUMBER);
パラメータ
表B-17 INCLUDEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
この値には |
使用上のノート
-
Oracle Schedulerの操作中にSQLファイアウォールが強制されるかどうかのステータスを確認するには、
DBA_SQL_FIREWALL_STATUS
データ・ディクショナリ・ビューのEXCLUDE_JOBS
列を問い合せます。出力がN
の場合、SQLファイアウォールはOracle Schedulerの操作中に実行できます。 -
Oracle Schedulerの操作中にSQLファイアウォールが実行されないようにするには、
DBMS_SQL_FIREWALL.EXCLUDE
プロシージャを実行します。
例
EXEC DBMS_SQL_FIREWALL.INCLUDE (DBMS_SQL_FIREWALL.SCHEDULER_JOB);
B.4.19 PURGE_LOGプロシージャ
このプロシージャは、指定されたパージ時間に基づいて、特定のユーザーに属するSQLファイアウォール・ログ(つまり、指定されたパージ時間より前に生成されたログ)をパージします。
構文
BEGIN
DBMS_SQL_FIREWALL.PURGE_LOG (
username IN VARCHAR2,
purge_time IN TIMESTAMP WITH TIME ZONE,
log_type IN NUMBER);
パラメータ
表B-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;
/
B.4.20 START_CAPTUREプロシージャ
このプロシージャは、ユーザーのSQLファイアウォール・キャプチャをすぐに開始します。
構文
DBMS_SQL_FIREWALL.START_CAPTURE ( username IN VARCHAR2);
パラメータ
表B-19 START_CAPTUREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール・キャプチャに指定されるユーザーの名前を指定します。 |
使用上のノート
-
ユーザーは、SQLファイアウォール・キャプチャを1つのみ持つことができます。ユーザーがすでにキャプチャに構成されているかどうかを確認するには、
DBA_SQL_FIREWALL_CAPTURES
データ・ディクショナリ・ビューを問い合せます。 -
キャプチャ・プロセスを開始すると、ユーザーが入力したすべてのSQLがSQLファイアウォール・キャプチャ・ログ表にキャプチャされます。
DBA_SQL_FIREWALL_CAPTURE_LOGS
データ・ディクショナリ・ビューを問い合せることで、このSQLを定期的に確認できます。
例
EXEC DBMS_SQL_FIREWALL.START_CAPTURE ('PFITCH');
B.4.21 STOP_CAPTUREプロシージャ
このプロシージャは、指定されたユーザーのSQLファイアウォール・キャプチャをすぐに停止します。
構文
DBMS_SQL_FIREWALL.STOP_CAPTURE ( username IN VARCHAR2);
パラメータ
表B-20 STOP_CAPTUREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLファイアウォール・キャプチャに指定されたユーザーの名前を指定します。このユーザーを確認するには、 |
使用上のノート
-
このプロシージャを実行する前に、キャプチャ・プロセスが現在実行されている必要があります。
DBA_SQL_FIREWALL_CAPTURES
データ・ディクショナリ・ビューを問い合せることで、そのステータスを確認できます。 -
キャプチャ・プロセスを停止した後、
DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST
プロシージャを実行することで、ユーザーの許可リストを生成できます。
例
EXEC DBMS_SQL_FIREWALL.STOP_CAPTURE ('PFITCH');
B.4.22 UPDATE_ALLOW_LIST_ENFORCEMENTプロシージャ
このプロシージャは、指定されたユーザーのSQLファイアウォール許可リストの強制オプションをすぐに更新します。
構文
BEGIN
DBMS_SQL_FIREWALL.UPDATE_ALLOW_LIST_ENFORCEMENT (
username IN VARCHAR2,
enforce IN NUMBER,
block IN BOOLEAN);
パラメータ
表B-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;
/