188 DBMS_SQL_FIREWALL

DBMS_SQL_FIREWALLパッケージを使用すると、ユーザーをモニターして、該当するユーザーに対するSQLインジェクション攻撃を検出または防止できます。

この章のトピックは、次のとおりです:

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)の両方で構成できます。

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ロールが付与されている必要があります。

DBMS_SQL_FIREWALLの定数

DBMS_SQL_FIREWALLパッケージは、複数のSQL Firewallプロシージャで使用される定数を提供します。

これらの定数を、次の表に示します。

表188-1 DBMS_SQL_FIREWALL定数

名前 タイプ 説明

DBMS_SQL_FIREWALL.ENFORCE_ALL

NUMBER

3

DBMS_SQL_FIREWALL.ENABLE_ALLOW_LISTプロシージャの実行時に、許可されたSQLおよび許可されたコンテキストの両方を適用します

DBMS_SQL_FIREWALL.ENFORCE_CONTEXT

NUMBER

1

DBMS_SQL_FIREWALL.ENABLE_ALLOW_LISTプロシージャの実行時に許可されたコンテキストを適用します。

DBMS_SQL_FIREWALL.ENFORCE_SQL

NUMBER

2

DBMS_SQL_FIREWALL.ENABLE_ALLOW_LISTプロシージャの実行時に許可されたSQLを適用します

DBMS_SQL_FIREWALL.ALL_LOGS

NUMBER

3

DBMS_SQL_FIREWALL.PURGEプロシージャの実行時にすべてのログをパージします

DBMS_SQL_FIREWALL.CAPTURE_LOG

NUMBER

1

DBMS_SQL_FIREWALL.PURGEプロシージャの実行時にキャプチャ・ログのみをパージします

DBMS_SQL_FIREWALL.IP_ADDRESS

NUMBER

3

DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXTまたはDBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXTプロシージャの実行時にユーザーのIPアドレスを指定します

DBMS_SQL_FIREWALL.OS_PROGRAM

NUMBER

1

DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXTまたはDBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXTプロシージャの実行時にユーザーのオペレーティング・システム・プログラムを指定します

DBMS_SQL_FIREWALL.OS_USERNAME

NUMBER

2

DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXTまたはDBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXTプロシージャの実行時にオペレーティング・システム名を指定します

DBMS_SQL_FIREWALL.SCHEDULER_JOB

NUMBER

1

SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストを取得して適用するかどうかを示します。 この定数は、DBMS_SQL_FIREWALL.EXCLUDEおよびDBMS_SQL_FIREWALL.INCLUDEプロシージャとともに使用します。

DBMS_SQL_FIREWALL.VIOLATION_LOG

NUMBER

2

DBMS_SQL_FIREWALL.PURGEプロシージャの実行時に違反ログのみをパージします

DBMS_SQL_FIREWALLサブプログラムの要約

この表は、DBMS_SQL_FIREWALLパッケージのサブプログラムについて説明しています。

表188-2 DBMS_SQL_FIREWALLパッケージ・サブプログラム

サブプログラム 説明

ADD_ALLOWED_CONTEXTプロシージャ

SQL Firewallに構成されているユーザーに対して許可されるコンテキストのリストにコンテキストを追加します

APPEND_ALLOW_LISTプロシージャ

ユーザーの既存のキャプチャ・ログまたは違反ログ(あるいはその両方)を使用して、既存の許可リストにコンテンツを追加します

APPEND_ALLOW_LIST_SINGLE_SQLプロシージャ

違反ログまたは取得ログへの単一のSQLレコードを既存の許可リストに追加します

CREATE_CAPTUREプロシージャ

指定されたユーザーの特定のレベルのSQL Firewallキャプチャを作成します

DELETE_ALLOWED_CONTEXTプロシージャ

ユーザーに割り当てられているSQL Firewallコンテキスト値を削除します

DELETE_ALLOWED_SQLプロシージャ

ユーザーに割り当てられている許可されたSQLから、指定されたエントリを削除します

DISABLEプロシージャ

SQL Firewallを無効にします

DISABLE_ALLOW_LISTプロシージャ

指定されたユーザーのSQL Firewall許可リストの適用を無効にします

DROP_ALLOW_LISTプロシージャ

指定されたユーザーのSQL Firewall許可リストを削除します

DROP_CAPTUREプロシージャ

SQL Firewallキャプチャを削除し、関連するすべてのキャプチャ・ログを削除します

ENABLEプロシージャ

SQL Firewallを有効にします

ENABLE_ALLOW_LISTプロシージャ

指定されたユーザーのSQL Firewall許可リストの適用を有効にします

EXCLUDEプロシージャ

SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャまたは適用できないようにします

EXPORT_ALLOW_LISTプロシージャ

特定のユーザーの許可リストをallow_list引数で指定されたCLOBにJSON形式でエクスポートします

FLUSH_LOGSプロシージャ

メモリーに存在するすべてのSQL Firewallログをログ表にフラッシュします

GENERATE_ALLOW_LISTプロシージャ

ユーザーの既存のキャプチャ・ログのデータを使用して、指定されたユーザーのSQL Firewall許可リストを生成します

IMPORT_ALLOW_LISTプロシージャ

指定された特定のユーザーのCLOBからターゲット・データベースにallow-listをインポートします。

INCLUDEプロシージャ

SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャおよび適用できるようにします

PURGE_LOGプロシージャ

SQL Firewallログをパージします

START_CAPTUREプロシージャ

ユーザーのSQL Firewallキャプチャを開始します

STOP_CAPTUREプロシージャ

ユーザーのSQL Firewallキャプチャを停止します

UPDATE_ALLOW_LIST_ENFORCEMENTプロシージャ

指定されたユーザーのSQL Firewall許可リストの適用オプションを更新します

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プロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストを持つユーザーの名前を指定します。 許可リストを持つすべてのユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

context_type

次のいずれかのコンテキスト・タイプを指定します。

  • DBMS_SQL_FIREWALL.IP_ADDRESSは、CIDR表記法のIPv4およびIPv6アドレスとサブネットを受け入れます。
  • DBMS_SQL_FIREWALL.OS_USERNAMEは、oracleなどの有効なオペレーティング・システム・ユーザー名を受け入れます。
  • DBMS_SQL_FIREWALL.OS_PROGRAMは、sqlplusSQL Developerなどの有効なオペレーティング・システム・プログラム名を受け入れます。

value

DBMS_SQL_FIREWALL.IP_ADDRESSのIPアドレスなどのcontext_type定数の値を指定します。 IPアドレスを持たないローカル(bequeath)接続を許可するには、DBMS_SQL_FIREWALL.IP_ADDRESSタイプの値Localとともに指定します。 コンテキストのすべての値(可能なすべてのオペレーティング・システム・プログラムなど)を指定するには、%ワイルドカード文字を入力します。

使用上のノート

  • 次のデータ・ディクショナリ・ビューを問い合せることで、ユーザーの現在のコンテキスト・タイプ設定を確認できます。

    • 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;
/

APPEND_ALLOW_LISTプロシージャ

このプロシージャは、ユーザーの既存のキャプチャ・ログまたは違反ログ(あるいはその両方)を使用して、既存の許可リストにコンテンツを追加します。

構文

DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST (
   username       IN  VARCHAR2,
   source         IN  NUMBER);

パラメータ

表188-4 APPEND_ALLOW_LISTプロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

source

次のいずれかのログ・タイプを指定します。

  • DBMS_SQL_FIREWALL.CAPTURE_LOG
  • DBMS_SQL_FIREWALL.VIOLATION_LOG
  • DBMS_SQL_FIREWALL.ALL_LOGS

使用上のノート

  • 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;
/

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プロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

sql_signature

追加するSQLのシグネチャを指定します。 ターゲット・レコードのSQLのシグネチャを検索するには、動的ビューのDBA_SQL_FIREWALL_CAPTUREまたはDBA_SQL_FIREWALL_VIOLATIONSを問い合せます。

current_user

SQLコマンドを実行したユーザーの名前を指定します。 たとえば、ユーザーpfitchpsmithスキーマ内に作成された定義者権限のプロシージャを起動した場合、そのプロシージャ内のすべてのSQLコマンドは、psmithとして実行され、それがcurrent_userです。 そのプロシージャが起動者権限のプロシージャの場合、current_userは起動者のpfitchになります。

top_level

実行されたSQLが最上位レベルであったかどうかを指定します。 次の値があります。

  • Y (はい)は、ターゲットSQLレコードが最上位レベル(ユーザーが直接実行する文)であることを意味します。
  • N (いいえ)は、ターゲットSQLレコードが最上位レベルではない(PL/SQLユニットから発行されるSQLコマンドである)ことを意味します。

source

追加するSQLレコードのソース・ログを指定します:

  • DBMS_SQL_FIREWALL.CAPTURE_LOG
  • DBMS_SQL_FIREWALL.VIOLATION_LOG (デフォルト)

使用上のノート

  • DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST_SINGLE_SQLは、指定されたソース・ログを処理し、許可リストに追加するターゲットSQLレコードを特定します。 次に、許可されたSQLのSQL Firewallメタデータ表を設定します。これは、許可リストの適用中に使用されます。
  • このプロシージャは、許可リストが有効なときにも無効なときにも実行できます。
  • 変更は即座に反映されます。
  • 新しい許可リストのバージョン番号が、新しく追加した許可されたSQLのエントリに関連付けられます。

  1. データ・ディクショナリ・ビューのDBA_SQL_FIREWALL_VIOLATIONSまたはDBA_SQL_FIREWALL_CAPTURE_LOGSを問い合せて、許可リストに追加するターゲットSQLレコードを検索します。

    ターゲットSQLレコードのUSERNAME列、SQL_SIGNATURE列、CURRENT_USER列およびTOP_LEVEL列の値を取得します。

  2. これらの値を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;
    /

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プロシージャのパラメータ

パラメータ 説明

username

SQL Firewallキャプチャを作成するユーザーの名前を指定します。 既存のユーザーを確認するには、DBA_SQL_FIREWALL_CAPTURESを問い合せます。

top_level_only

  • TRUEの場合、ユーザーによって直接発行されたSQL文のみをキャプチャします
  • FALSEの場合、トップレベルのSQL文とPL/SQLユニットによって発行されたSQL文の両方をキャプチャします この設定がデフォルトです。

start_capture

  • TRUEの場合、DBMS_SQL_FIREWALL.CREATE_CAPTUREの実行後すぐにキャプチャ・プロセスを開始します。 この設定がデフォルトです。
  • FALSEの場合、キャプチャ・プロセスを開始しません。 後でDBMS_SQL_FIREWALL.START_CAPTUREを使用して開始できます。

使用上のノート

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;
/

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プロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

context_type

  • DBMS_SQL_FIREWALL.IP_ADDRESSは、CIDR表記法のIPv4およびIPv6アドレスとサブネットを受け入れます。
  • DBMS_SQL_FIREWALL.OS_USERNAMEは、oracleなどの有効なオペレーティング・システム・ユーザー名を受け入れます。
  • DBMS_SQL_FIREWALL.OS_PROGRAMは、sqlplusSQL Developerなどの有効なオペレーティング・システム・プログラム名を受け入れます。

value

DBMS_SQL_FIREWALL.IP_ADDRESSのIPアドレスなどのcontext_type定数の値を指定します。 この値を省略するか、NULLを指定すると、指定したコンテキスト・タイプの許可されたコンテキスト値がすべて削除されます。 この設定がデフォルトです。

使用上のノート

  • 次のデータ・ディクショナリ・ビューを問い合せることで、ユーザーの現在のコンテキスト・タイプ設定を確認できます。
    • 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;
/

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プロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

allowed_sql_id

このユーザーの許可されたSQLから削除する、許可されたSQLエントリのIDを指定します。この値を確認するには、DBA_SQL_FIREWALL_ALLOWED_SQLを問い合せます。

使用上のノート

  • このプロシージャは、許可リストが有効なときにも無効なときにも実行できます。
  • 変更は即座に反映されます。

BEGIN
  DBMS_SQL_FIREWALL.DELETE_ALLOWED_SQL (
    username         => 'PFITCH',
    allowed_sql_id   => 1
   );
END;
/

DISABLEプロシージャ

このプロシージャは、SQL Firewallを無効にし、有効になっている既存のキャブチャおよび許可リストをすべて停止します。

構文

DBMS_SQL_FIREWALL.DISABLE;

パラメータ

なし

使用上のノート

DBA_SQL_FIREWALL_STATUSデータ・ディクショナリ・ビューを問い合せることで、SQL Firewallの現在のステータスを確認できます。

EXEC DBMS_SQL_FIREWALL.DISABLE;

DISABLE_ALLOW_LISTプロシージャ

このプロシージャは、指定されたユーザーのSQL Firewall許可リストの適用をただちに無効にします。

構文

DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST (
   username       IN  VARCHAR2);

パラメータ

表188-9 DISABLE_ALLOW_LISTプロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。 NULLを指定すると、現在有効なすべての許可リストが無効になります。

使用上のノート

ユーザーの許可リストのステータスを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。

EXEC DBMS_SQL_FIREWALL.DISABLE_ALLOW_LIST ('PFITCH');

DROP_ALLOW_LISTプロシージャ

このプロシージャは、指定されたユーザーのSQL Firewall許可リストを削除します。

構文

DBMS_SQL_FIREWALL.DROP_ALLOW_LIST (
   username       IN  VARCHAR2);

パラメータ

表188-10 DROP_ALLOW_LISTプロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

使用上のノート

  • ユーザーの許可リストのステータスを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。

  • 現在有効になっている許可リストは削除できません。 許可リストを無効にするには、DBMS_SQL_FIREWALL.DISABLE_ALLOW_LISTプロシージャを実行します。

EXEC DBMS_SQL_FIREWALL.DROP_ALLOW_LIST ('PFITCH');

DROP_CAPTUREプロシージャ

このプロシージャは、SQL Firewallキャプチャを削除し、関連するすべてのキャプチャ・ログを削除します。

構文

DBMS_SQL_FIREWALL.DROP_CAPTURE (
   username       IN VARCHAR2);

パラメータ

表188-11 DROP_CAPTUREプロシージャのパラメータ

パラメータ 説明

username

SQL Firewallキャプチャを削除するユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_CAPTURESを問い合せます。

使用上のノート

  • 既存のSQL Firewallキャプチャのステータスを確認するには、DBA_SQL_FIREWALL_CAPTURESデータ・ディクショナリ・ビューを問い合せます。

  • 現在実行中のキャプチャは削除できません。 キャプチャを停止するには、DBMS_SQL_FIREWALL.STOP_CAPTUREプロシージャを実行します。

  • ユーザーのキャプチャを削除してもユーザーの許可リストには影響せず、キャプチャが削除された場合でも引き続き実行できます。 キャプチャおよび許可リストは個別のエンティティです。

EXEC DBMS_SQL_FIREWALL.DROP_CAPTURE ('C##HR_ADMIN');

ENABLEプロシージャ

このプロシージャは、SQL Firewallを有効にし、有効にするように構成されている既存のキャブチャおよび許可リストをすべて開始します。

構文

DBMS_SQL_FIREWALL.ENABLE;

パラメータ

なし

使用上のノート

DBA_SQL_FIREWALL_STATUSデータ・ディクショナリ・ビューを問い合せることで、SQL Firewallの現在のステータスを確認できます。

EXEC DBMS_SQL_FIREWALL.ENABLE;

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プロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストを有効にするユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。 NULLと入力すると、許可リストが有効になっていないすべてのユーザーの許可リストが有効になります。

enforce

  • DBMS_SQL_FIREWALL.ENFORCE_CONTEXTは、構成済の許可されたコンテキストを適用します。
  • DBMS_SQL_FIREWALL.ENFORCE_SQLは、構成済の許可されたSQLを適用します。
  • DBMS_SQL_FIREWALL.ENFORCE_ALLは、許可されたコンテキストと許可されたSQLの両方を適用します。 この設定がデフォルトです。

block

  • TRUEの場合、ユーザーが許可リスト定義に違反するたびに、ユーザーのデータベース接続またはユーザーのSQL実行をブロックします。
  • FALSEの場合、一致しないユーザー・データベース接続またはSQLコマンドを続行できます。 この設定がデフォルトです。

使用上のノート

  • ユーザーの許可リストのステータスを確認するには、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;
/

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プロシージャのパラメータ

パラメータ 説明

FEATURE

この値にはDBMS_SQL_FIREWALL.SCHEDULER_JOBと入力します。

使用上のノート

  • 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);

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プロシージャのパラメータ

パラメータ 説明

username

許可リストが作成されているユーザーを指定します。 許可リストがあるユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

allow_list

エクスポートされたallow-listの移動先にするCLOB (すでに存在している必要があります)を指定します。

使用上のノート

  • このプロシージャの実行前に、CLOBを作成してAPIに渡しておく必要があります(たとえば、PL/SQLクライアントの場合はDBMS_LOB.CREATETEMPORARY、JDBC Javaクライアントの場合はOracleConnection.createClob()を使用します)。

  • このエクスポート操作には、許可リストの設定(statusenforceblocktop_level_onlygenerated_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;
/

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;

GENERATE_ALLOW_LISTプロシージャ

このプロシージャは、ユーザーの既存のキャプチャ・ログを使用して、指定されたユーザーのSQL Firewall許可リストを生成します。

構文

DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST (
   username       IN  VARCHAR2;

パラメータ

表188-15 GENERATE_ALLOW_LISTプロシージャのパラメータ

パラメータ 説明

username

SQL Firewall許可リストに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_CAPTURESを問い合せます。

使用上のノート

  • 既存の生成済許可リストに関する情報を確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。
  • このプロシージャを実行する前に、次のコンポーネントが必要です。
    • 指定されたユーザーが存在すること。
    • このユーザーのキャプチャが作成されていること(DBMS_SQL_FIREWALL.CREATE_CAPTUREを使用)。 ユーザーの許可リストを生成する前に、このキャプチャを無効にしておく必要があります(DBMS_SQL_FIREWALL.STOP_CAPTUREを使用)。
    • ユーザーの許可リストがまだ存在しないこと。

EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST ('PFITCH');

IMPORT_ALLOW_LISTプロシージャ

このプロシージャは、指定された特定のユーザーのCLOBからターゲット・データベースにallow-listをインポートします。

構文

DBMS_SQL_FIREWALL.IMPORT_ALLOW_LIST (
   username       IN      VARCHAR2,
   allow_list     IN      CLOB;

パラメータ

表188-16 IMPORT_ALLOW_LISTプロシージャのパラメータ

パラメータ 説明

username

エクスポートされたallow-listのユーザーを指定します。 このユーザーにターゲット・データベースですでに許可リストが作成されているかどうかを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。

allow_list

DBMS_SQL_FIREWALL.EXPORT_ALLOW_LISTで許可リストをエクスポートしたときに作成したCLOBを指定します。

使用上のノート

  • このユーザーの許可リストがターゲット・データベースにない場合は、JSONペイロードのallow-listを使用して、このユーザー用の新しいallow-listが作成されます。 新しい許可リストの設定(statustop_level_onlyenforceblockgenerated_onstatus_updated_on)、許可されたコンテキストおよび許可されたSQLはJSONのものと同じになります。 指定されたユーザーの許可リストがすでにターゲット・データベースにある場合、既存の許可リストのすべての設定(statustop_level_onlyenforceblockおよび各種タイムスタンプ)は変更されませんが、許可された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;
/

INCLUDEプロシージャ

このプロシージャは、SQL FirewallがOracle Scheduler操作中にデータベース接続およびSQL実行の許容リストをキャプチャおよび適用できるようにします。

構文

DBMS_SQL_FIREWALL.INCLUDE (
   FEATURE        IN NUMBER);

パラメータ

表188-17 INCLUDEプロシージャのパラメータ

パラメータ 説明

FEATURE

この値にはDBMS_SQL_FIREWALL.SCHEDULER_JOBと入力します。

使用上のノート

  • 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);

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プロシージャのパラメータ

パラメータ 説明

username

キャプチャ・ログまたは違反ログをパージするユーザーを指定します。 キャプチャ・ログを表示するには、DBA_SQL_FIREWALL_CAPTURE_LOGSを問い合せ、違反ログを表示するには、DBA_SQL_FIREWALL_VIOLATIONSを問い合せます。

purge_time

特定の時間より前に生成されたログのみをパージするように指定できるタイムスタンプ(TIMESTAMP形式)。 この値を省略すると、Oracle Databaseでは生成された時間に関係なくすべてのログがパージされます。

log_type

パージするログのタイプを指定します。

  • DBMS_SQL_FIREWALL.CAPTURE_LOG
  • DBMS_SQL_FIREWALL.VIOLATION_LOG
  • DBMS_SQL_FIREWALL.ALL_LOGS (デフォルト)

使用上のノート

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;
/

START_CAPTUREプロシージャ

このプロシージャは、ユーザーのSQL Firewallキャプチャをただちに開始します。

構文

DBMS_SQL_FIREWALL.START_CAPTURE (
   username       IN  VARCHAR2);

パラメータ

表188-19 START_CAPTUREプロシージャのパラメータ

パラメータ 説明

username

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');

STOP_CAPTUREプロシージャ

このプロシージャは、ユーザーのSQL Firewallキャプチャをただちに停止します。

構文

DBMS_SQL_FIREWALL.STOP_CAPTURE (
   username       IN  VARCHAR2);

パラメータ

表188-20 STOP_CAPTUREプロシージャのパラメータ

パラメータ 説明

username

SQL Firewallキャプチャに指定されたユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_CAPTURESを問い合せます。

使用上のノート

  • このプロシージャを実行する前に、キャプチャ・プロセスが現在実行されている必要があります。 DBA_SQL_FIREWALL_CAPTURESデータ・ディクショナリ・ビューを問い合せることで、そのステータスを確認できます。

  • キャプチャ・プロセスを停止した後、DBMS_SQL_FIREWALL.GENERATE_ALLOW_LISTプロシージャを実行してユーザーの許可リストを生成できます。

EXEC DBMS_SQL_FIREWALL.STOP_CAPTURE ('PFITCH');

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プロシージャのパラメータ

パラメータ 説明

username

許可リストが生成されているユーザーの名前を指定します。 このユーザーを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSを問い合せます。 NULLと入力すると、既存のすべての許可リスト(有効な許可リストと無効な許可リストの両方)の適用オプションが更新されます。

enforce

  • DBMS_SQL_FIREWALL.ENFORCE_CONTEXTは、構成済の許可されたコンテキストを適用します。
  • DBMS_SQL_FIREWALL.ENFORCE_SQLは、構成済の許可されたSQLを適用します。
  • DBMS_SQL_FIREWALL.ENFORCE_ALLは、許可されたコンテキストと許可されたSQLの両方を適用します。 この設定がデフォルトです。

block

  • TRUEの場合、ユーザーが許可リスト定義に違反するたびに、ユーザーのデータベース接続またはユーザーのSQL実行をブロックします。
  • FALSEの場合、一致しないユーザー・データベース接続またはSQLコマンドを続行できます。 この設定がデフォルトです。

使用上のノート

ユーザーの許可リストのステータスを確認するには、DBA_SQL_FIREWALL_ALLOW_LISTSデータ・ディクショナリ・ビューを問い合せます。

BEGIN
  DBMS_SQL_FIREWALL.UPDATE_ALLOW_LIST_ENFORCEMENT (
    username       => 'PFITCH',
    enforce        => DBMS_SQL_FIREWALL.ENFORCE_SQL,
    block          => TRUE
   );
END;
/