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の定数

名前 タイプ 説明

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ファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャおよび強制するかどうかを示します。この定数は、DBMS_SQL_FIREWALL.EXCLUDEおよびDBMS_SQL_FIREWALL.INCLUDEプロシージャとともに使用します。

DBMS_SQL_FIREWALL.VIOLATION_LOG

NUMBER

2

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

B.4 DBMS_SQL_FIREWALLのサブプログラムの要約

この表には、DBMS_SQL_FIREWALLパッケージのサブプログラムとその説明を示します。

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

サブプログラム 説明

ADD_ALLOWED_CONTEXTプロシージャ

SQLファイアウォール用に構成されているユーザーに許可されたコンテキストのリストにコンテキストを追加します

APPEND_ALLOW_LISTプロシージャ

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

APPEND_ALLOW_LIST_SINGLE_SQLプロシージャ

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

CREATE_CAPTUREプロシージャ

指定されたユーザーの特定のレベルのSQLファイアウォール・キャプチャを作成します

DELETE_ALLOWED_CONTEXTプロシージャ

ユーザーに割り当てられているSQLファイアウォール・コンテキスト値を削除します

DELETE_ALLOWED_SQLプロシージャ

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

DISABLEプロシージャ

SQLファイアウォールを無効にします

DISABLE_ALLOW_LISTプロシージャ

指定されたユーザーのSQLファイアウォール許可リストの強制を無効にします

DROP_ALLOW_LISTプロシージャ

指定されたユーザーのSQLファイアウォール許可リストを削除します

DROP_CAPTUREプロシージャ

SQLファイアウォール・キャプチャを削除し、関連するすべてのキャプチャ・ログを削除します

ENABLEプロシージャ

SQLファイアウォールを有効にします

ENABLE_ALLOW_LISTプロシージャ

指定されたユーザーのSQLファイアウォール許可リストの強制を有効にします

EXCLUDEプロシージャ

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

EXPORT_ALLOW_LISTプロシージャ

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

FLUSH_LOGSプロシージャ

メモリーに存在するすべてのSQLファイアウォール・ログをログ表にフラッシュします

GENERATE_ALLOW_LISTプロシージャ

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

IMPORT_ALLOW_LISTプロシージャ

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

INCLUDEプロシージャ

SQLファイアウォールがOracle Schedulerの操作中にデータベース接続およびSQL実行の許可リストをキャプチャおよび強制できるようにします

PURGE_LOGプロシージャ

SQLファイアウォール・ログをパージします

START_CAPTUREプロシージャ

ユーザーのSQLファイアウォール・キャプチャを開始します

STOP_CAPTUREプロシージャ

ユーザーのSQLファイアウォール・キャプチャを停止します

UPDATE_ALLOW_LIST_ENFORCEMENTプロシージャ

指定されたユーザーの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プロシージャのパラメータ

パラメータ 説明

username

SQLファイアウォール許可リストがあるユーザーの名前を指定します。許可リストがあるすべてのユーザーを確認するには、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;
/

B.4.2 APPEND_ALLOW_LISTプロシージャ

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

構文

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

パラメータ

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

パラメータ 説明

username

SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、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ファイアウォール・メタデータ表にデータを移入します。
  • このプロシージャは、許可リストが有効でも無効でも実行できます。
  • 変更はすぐに有効になります。
  • 新しい許可リスト・バージョン番号が、同じ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プロシージャのパラメータ

パラメータ 説明

username

SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、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ファイアウォール・メタデータ表にデータを移入します。
  • このプロシージャは、許可リストが有効でも無効でも実行できます。
  • 変更はすぐに有効になります。
  • 新しい許可リスト・バージョン番号が、新たに追加された、許可された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;
    /

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

パラメータ 説明

username

SQLファイアウォール・キャプチャの作成対象となるユーザーの名前を指定します。既存のユーザーを確認するには、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ファイアウォール・キャプチャ用にすでに構成されているユーザーなど、既存の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プロシージャのパラメータ

パラメータ 説明

username

SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、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;
/

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

パラメータ 説明

username

SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、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;
/

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

パラメータ 説明

username

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

使用上のノート

ユーザーの許可リストのステータスを確認するには、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プロシージャのパラメータ

パラメータ 説明

username

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

使用上のノート

  • ユーザーの許可リストのステータスを確認するには、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プロシージャのパラメータ

パラメータ 説明

username

SQLファイアウォール・キャプチャの削除対象となるユーザーの名前を指定します。このユーザーを確認するには、DBA_SQL_FIREWALL_CAPTURESを問い合せます。

使用上のノート

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

パラメータ 説明

username

SQLファイアウォール許可リストの有効化対象となるユーザーの名前を指定します。このユーザーを確認するには、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ファイアウォールでは、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プロシージャのパラメータ

パラメータ 説明

FEATURE

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

使用上のノート

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

パラメータ 説明

username

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

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

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

パラメータ 説明

username

SQLファイアウォール許可リストに指定されたユーザーの名前を指定します。このユーザーを確認するには、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');

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

パラメータ 説明

username

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

allow_list

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

使用上のノート

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

パラメータ 説明

FEATURE

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

使用上のノート

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

パラメータ 説明

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

B.4.20 START_CAPTUREプロシージャ

このプロシージャは、ユーザーのSQLファイアウォール・キャプチャをすぐに開始します。

構文

DBMS_SQL_FIREWALL.START_CAPTURE (
   username       IN  VARCHAR2);

パラメータ

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

パラメータ 説明

username

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

パラメータ 説明

username

SQLファイアウォール・キャプチャに指定されたユーザーの名前を指定します。このユーザーを確認するには、DBA_SQL_FIREWALL_CAPTURESを問い合せます。

使用上のノート

  • このプロシージャを実行する前に、キャプチャ・プロセスが現在実行されている必要があります。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プロシージャのパラメータ

パラメータ 説明

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