13 SQLファイアウォールの使用
Oracle Databaseに含まれるSQLファイアウォールは、すべての受信SQL文を検査し、明示的に認可されたSQLのみが実行されるようにします。
- SQLファイアウォールの概要
SQLファイアウォールの使用を開始する前に、その仕組みおよび使用するための権限を理解する必要があります。 - SQLファイアウォールの構成
DBMS_SQL_FIREWALL
パッケージを使用してOracleデータベースにSQLファイアウォールを構成することも、Oracle Data Safeで構成することもできます。 - SQLファイアウォールと他のOracle機能との連携
SQLファイアウォールを他のOracle機能とともに使用した場合の影響に注意してください。 - SQLファイアウォールのデータ・ディクショナリ・ビューおよび問合せ例
Oracleには、構成したSQLファイアウォールの保護に関する様々な種類の情報を検索できる一連のデータ・ディクショナリ・ビューが用意されています。
親トピック: データへのアクセス制御
13.1 SQLファイアウォールの概要
SQLファイアウォールの使用を開始する前に、その仕組みおよび使用するための権限を理解する必要があります。
- SQLファイアウォールについて
SQLファイアウォールは、指定されたユーザーに対して認可されたSQL文または接続にのみデータベース・アクセスを制限することで、一般的なデータベース攻撃に対するリアルタイム保護を提供します。 - SQLファイアウォールの使用のための一般的なプロセス
SQLファイアウォールを使用するには、ユーザーのSQLアクティビティを取得し、取得したログを確認し、許可リストを生成してそれを有効化し、あらゆる違反に関する違反ログを監視する必要があります。 - SQLファイアウォールを構成および使用するための権限
SQLファイアウォールを管理したり、SQLファイアウォールに関連付けられたビューを問い合せるには、適切なロールが付与されている必要があります。 - SQLファイアウォールのサンプル・スクリプトおよびビデオ
Oracleでは、SQLファイアウォール使用のサンプル・スクリプトと、SQLファイアウォールの仕組みを説明するビデオを提供しています。
親トピック: SQLファイアウォールの使用
13.1.1 SQLファイアウォールについて
SQLファイアウォールは、指定されたユーザーに対して認可されたSQL文または接続にのみデータベース・アクセスを制限することで、一般的なデータベース攻撃に対するリアルタイムの保護を提供します。
SQLインジェクション攻撃、異常なアクセス、資格証明の盗難または不正使用によるリスクを軽減し、潜在的なSQLインジェクション攻撃を防止または検出します。
SQLファイアウォールを使用すると、一般的なアプリケーション・ユーザーが実行するSQL文の許可リスト(つまり、許可されるアクション)をデータベース・ユーザーごとに作成し、予期しないSQLを検出してブロックし、ログに記録できます。
SQLファイアウォールを使用して、データベースで処理できるSQL文を制御できます。データベース接続およびSQL文に関連付けられた接続パスを制限できます。また、SQLファイアウォールでは、IPアドレスなどのセッション・コンテキスト・データを使用してデータベース接続を制限できます。認可されていないSQLを記録してブロックできます。
SQLファイアウォールは、認可されたSQL文または接続にのみデータベース・ユーザー・アクセスを制限することで、一般的なデータベース攻撃に対するリアルタイムの保護を提供します。SQLインジェクション攻撃、異常なアクセス、資格証明の盗難または不正使用によるリスクを軽減し、潜在的なSQLインジェクション攻撃を防止または検出します。SQLファイアウォールはOracleデータベースに組み込まれているため、バイパスできないようになっています。ローカル・テキストかネットワーク・テキストか、暗号化テキストかクリア・テキストかに関係なく、すべてのSQL文が検査されます。最上位のSQL、ストアド・プロシージャおよび関連するデータベース・オブジェクトが調査されます。
SQLファイアウォール・ポリシーは、アプリケーション・サービス・アカウントであっても、レポート・ユーザーやデータベース管理者などの直接データベース・ユーザーのいずれであっても、データベース・アカウント・レベルで機能します。つまり、データベース・ユーザーHR
にSQLファイアウォール・ポリシーが1つ、データベース・ユーザーJOE
にSQLファイアウォール・ポリシーが1つある可能性があります。この柔軟性により、データベース管理者またはアプリケーション・サービス・アカウントのいずれかから、データベースの保護レベルを段階的に構築できます。
SQLファイアウォールは、IPアドレス、オペレーティング・システムのユーザー名、オペレーティング・システム・プログラム名などのセッション・コンテキスト・データを使用して、データベース・アカウントがデータベースに接続する方法を制限します。これにより、アプリケーション・サービス・アカウント資格証明の盗難または誤用のリスクを軽減できます。SQLファイアウォールの一般的なユースケースは、アプリケーションのワークロードに関するものです。
SQLファイアウォールは、ルートとプラガブル・データベース(PDB)の両方で使用できます。SQLファイアウォールは、オンプレミス、クラウド、マルチテナント、Oracle Data Guard、Oracle Real Application Clustersなど、すべてのOracle Databaseデプロイメントに対してシンプルで使いやすいファイアウォール・ソリューションです。SQLファイアウォールは、Oracle、Transparent Data Encryption (TDE)、データベース監査、Oracle Database Vaultなどの他のOracle Databaseセキュリティ機能と連携して動作します。
SQLファイアウォールは、トランザクション制御コマンド(SAVEPOINT
、COMMIT
およびROLLBACK
)を除くすべてのSQLコマンド(つまり、取得および強制)をサポートします。また、SQLファイアウォールでは、SQL*PlusコマンドPASSWORD
およびDESCRIBE
と、データベース・リンクを介したリモート・プロシージャ・コール(RPC)がサポートされています。
次の図は、SQLファイアウォール・プロセスの仕組みを示しています。
- ユーザーがWebアプリケーションを介してOracleデータベースにログインします。
- ユーザーはSQL文を実行し、Oracleデータベースへのインバウンド・トラフィックを作成します。
- クラウドとオンプレミスの両方のデプロイメントの場合、SQLファイアウォールは、次の文に対して構成されている認可に基づいてSQL文を処理します。
- その後の実行でSQLを許可します。
- SQLを許可し、ログに記録します。
- 認可されないSQLをログに記録し、必要に応じてブロックします。
親トピック: SQLファイアウォールの概要
13.1.2 SQLファイアウォールの使用のための一般的なプロセス
SQLファイアウォールを使用するには、ユーザーのSQLアクティビティを取得し、取得したログを確認し、許可リストを生成してそれを有効化し、あらゆる違反に関する違反ログを監視する必要があります。
次の図は、認可されたSQL文およびデータベース接続を学習し、各アプリケーション・ユーザーの保護を有効にするようにSQLファイアウォールを構成する方法を示しています。
- ユーザーのSQLアクティビティの取得: 学習ステージでは、アプリケーション・ユーザーが発行するすべての認可SQL文を取得して収集します。
- 取得の確認: ユーザーのSQL文を収集した後、SQLファイアウォール固有のデータ・ディクショナリ・ビューを問い合せて、取得したこのデータを確認できます。このステップでは、取得がニーズに適しているかどうかを判断できます。
- 許可リストの生成: 取得を確認した後、学習ステージで取得するSQL文およびデータベース接続コンテキストから許可リストを生成できます。許可リスト・ルールは、次の2種類のリストで構成されます。
- 許可されたSQLリスト: 一定の基準を満たした場合にユーザーに実行を許可するSQL文です。たとえば、
hr_manager
アプリケーション・ユーザーからHR.EMPLOYEES
表への想定されるSQL問合せを、許可されたSQLリストに含めることができます。実行時に、SQLファイアウォールがデータベースで適用されると、現在のSQL文とその実行状態(現行ユーザーIDと、SQLがトップ・レベルである(ユーザーが直接実行している)かどうか)が、許可されたSQLリスト内のSQL文とその実行コンテキストと一致するかどうかチェックされます。SQLファイアウォールは、許可されたSQLリストにない予期しないSQLを検出してブロックし、ログに記録します。 - 許可されたコンテキスト・リスト: データベース接続を制御します。ユーザーがOracle Databaseに接続すると、SQLファイアウォールは接続を許可する前に、現在のセッション・コンテキスト(クライアントIPアドレス、オペレーティング・システム・ユーザー名またはオペレーティング・システム・プログラム名のいずれか)をチェックし、それが許可されたコンテキスト・リストの値と一致することを確認します。
許可リストを確認し、
DBMS_SQL_FIREWALL.ADD_ALLOWED_CONTEXT
、DBMS_SQL_FIREWALL.DELETE_ALLOWED_CONTEXT
、およびDBMS_SQL_FIREWALL.DELETE_ALLOWED_SQL
プロシージャを使用して必要な調整を加えます。 - 許可されたSQLリスト: 一定の基準を満たした場合にユーザーに実行を許可するSQL文です。たとえば、
- 許可リストの有効化: 保護ステージでは、生成後の許可リストをユーザーに対して有効にできます。このステップでは、SQLインジェクション攻撃を検出して保護するために、このユーザーのすべてのデータベース接続に対して許可リストのチェックを実施します。
SQLファイアウォールが有効になっているユーザーがデータベースと対話すると、許可リストの定義と一致しないアクションはすべてSQLファイアウォール違反とみなされ、違反ログに書き込まれます。SQLファイアウォールでは、アプリケーション・ユーザーによるアクションの実行をログに記録し、場合によってはブロックできます。たとえば、次のアクションが実行されると、SQLファイアウォール違反が発生します。
- ユーザーの現在のSQL文が、許可されたSQLリストのSQL文と一致しない。
- ユーザーの現在のセッションIPアドレスが、許可されたコンテキスト・リストのIPアドレスと一致しない。
次の2つのソースから
DBMS_SQL_FIREWALL.APPEND_ALLOW_LIST
プロシージャを使用して、いつでも既存の許可リストに追加できます。- 違反ログ:
DBA_SQL_FIREWALL_VIOLATIONS
- 取得ログ:
DBA_SQL_FIREWALL_CAPTURE_LOGS
- 違反の監視: SQLファイアウォールにより、予期しないアクセス・パターンに関する違反が発生します。SQLファイアウォールから、異常なアクセス・パターンや不正なSQLをユーザーが検出するように要求された違反がないか、
DBA_SQL_FIREWALL_VIOLATIONS
データ・ディクショナリ・ビューを問い合せます。
次のことに注意してください。
- Oracle Databaseは、すべてのSQLファイアウォール管理アクションを強制的に監査し、それらを統合監査証跡データ・ディクショナリ・ビュー
UNIFIED_AUDIT_TRAIL
に書き込みます。統合監査ポリシーを作成して、SQLファイアウォール違反をモニターすることもできます。SQLファイアウォールをモニターおよびトラブルシューティングするもう1つの方法は、SQL_FIREWALL
トレース・ファイル設定を使用することです。 - 既存の許可リストを含め、SQLファイアウォール・メタデータをエクスポートおよびインポートするには、Oracle Data Pumpの
EXPDB
およびIMPDB
ユーティリティを使用します。 - 通常のSQLファイアウォール管理タスクの一環として
DBMS_SQL_FIREWALL.PURGE_LOG
プロシージャを使用して、違反ログを定期的に監視してパージすることをお薦めします。十分にトレーニングされた環境では、違反ログは大量にはならないと考えられます。 - SQLファイアウォールは、ユーザーが発行するSQL文を直接、またはユーザーがターゲット・ユーザーのセッションで起動するPL/SQLユニットから取得します。
- SQLファイアウォールは、正常に実行されたSQL文のみを取得します。つまり、SQL文がエラーのために実行に失敗した場合、それに対応する文はSQLファイアウォールでは取得できません。
- SQLファイアウォールは、内部の問合せ変換(ビューまたはマクロの展開や、Oracle Virtual Private Database (VPD)ポリシーの適用など)が実行される前にSQL文を取得します。
- SQLファイアウォールは、取得したSQL文を正規化し、リテラル値を特別な記号で置き換えてからログ表に格納します。
- セッション・コンテキスト属性(クライアントIPアドレス、OSユーザー名およびOSプログラム名)は、セッションの作成時に1回のみチェックされます。
- 許可リストが有効になる前に作成された既存のセッションの場合、SQLファイアウォールでは許可されたコンテキストもチェックされますが、セッション・コンテキストが一致しない場合でも既存のセッションは終了されません。この場合、SQLファイアウォールは違反のログを記録しません。
親トピック: SQLファイアウォールの概要
13.1.3 SQLファイアウォールを構成および使用するための権限
SQLファイアウォールを管理したり、SQLファイアウォールに関連付けられたビューを問い合せるには、適切なロールが付与されている必要があります。
SQLファイアウォールを管理するには、SQL_FIREWALL_ADMIN
ロールが付与されている必要があります。このロールは、次の権限を提供します。
ADMINISTER SQL FIREWALL
システム権限:DBMS_SQL_FIREWALL
パッケージのPL/SQLプロシージャを実行するのに必要ですEXECUTE
権限:DBMS_SQL_FIREWALL
PL/SQLパッケージ用READ
権限: SQLファイアウォールDBA_SQL_FIREWALL_
*データ・ディクショナリ・ビュー用
DBA_SQL_FIREWALL_
*データ・ディクショナリ・ビューを問い合せる(ただし、SQLファイアウォールを管理しない)には、ユーザーにSQL_FIREWALL_VIEWER
ロールが付与されている必要があります。
ノート:
SQLファイアウォールSQL_FIREWALL_ADMIN
およびSQL_FIREWALL_VIEWER
ロールは強力なロールです。これらのロールは、信頼できるユーザーにのみ付与します。
関連トピック
親トピック: SQLファイアウォールの概要
13.1.4 SQLファイアウォールのサンプル・スクリプトおよびビデオ
Oracleでは、SQLファイアウォール使用のサンプル・スクリプトと、SQLファイアウォールの仕組みを説明するビデオを提供しています。
次の資料も参照してください。
親トピック: SQLファイアウォールの概要
13.2 SQLファイアウォールの構成
DBMS_SQL_FIREWALL
パッケージを使用してOracleデータベースにSQLファイアウォールを構成することも、Oracle Data Safeに構成することもできます。
- SQLファイアウォールの構成について
SQLファイアウォールの使用方法に応じて、Oracle Data SafeまたはDBMS_SQL_FIREWALL
パッケージを使用してSQLファイアウォールを構成する方法の両方に利点があります。 - Oracle Data Safeを使用したSQLファイアウォールの構成および管理
Oracle Cloud上のOracle Data Safeを使用すると、複数のSQLファイアウォールを一元的に管理し、Oracleデータベースのフリート全体にわたるSQLファイアウォール違反の包括的なビューを取得できます。 - DBMS_SQL_FIREWALLパッケージを使用したSQLファイアウォールの構成および管理
ターゲット・ユーザーにSQLファイアウォールを構成した後、構成の変更、古いログのパージおよびエラーのトラブルシューティングなどのメンテナンス・タスクを実行できます。
親トピック: SQLファイアウォールの使用
13.2.1 SQLファイアウォールの構成について
Oracle Data SafeまたはDBMS_SQL_FIREWALL
パッケージを使用してSQLファイアウォールを構成するどちらの方法にも、SQLファイアウォールの使用方法に応じた利点があります。
- 複数のSQLファイアウォールの一元的な管理: 複数のSQLファイアウォールを一元的に管理する場合は、Data Safeユーザー・インタフェースを使用できます。さらに自動化と統合するために、Data Safe REST API、ソフトウェア開発者キット(SDK)、CLIおよびTerraformを使用できます。また、より広範なOracle Cloud Infrastructure (OCI)エコシステムを使用して、SQLファイアウォール違反をアラートおよび通知と統合することもできます。
- 個々のOracle Databaseインスタンス内のSQLファイアウォールの管理: 個々のOracle Databaseインスタンス内のSQLファイアウォールを管理するには、
DBMS_SQL_FIREWALL
パッケージのPL/SQLプロシージャを使用します。
親トピック: SQLファイアウォールの構成
13.2.2 Oracle Data Safeを使用したSQLファイアウォールの構成および管理
Oracle Cloud上のOracle Data Safeを使用すると、複数のSQLファイアウォールを一元的に管理し、Oracleデータベースのフリート全体にわたるSQLファイアウォール違反の包括的なビューを取得できます。
SQLファイアウォール管理者は、Data Safeを使用して、関連するデータベース接続パス(IPアドレス、OSプログラム、OSユーザー)を持つデータベース・ユーザーのSQLアクティビティを収集し、収集の進行状況を監視できます。Data Safeを使用すると、収集されたSQLトラフィックからSQLファイアウォール・ポリシーを生成および有効化できます。Data Safeでは、違反ログが自動的に収集され、コンソールからSQLファイアウォール違反を監視できます。
次の図は、Data Safe内のSQLファイアウォール・ダッシュボードを示しています。
ダッシュボードの違反サマリーは、選択した期間にSQLファイアウォールが有効になっているコンパートメント内のすべてのターゲットからのSQLファイアウォール違反の包括的なビューを提供します。ここから、違反にドリルダウンして詳細な分析を実行できます。
関連トピック
親トピック: SQLファイアウォールの構成
13.2.3 DBMS_SQL_FIREWALLパッケージを使用したSQLファイアウォールの構成および管理
ターゲット・ユーザーに対してSQLファイアウォールを構成した後、構成の変更、古いログのパージ、エラーのトラブルシューティングなどのメンテナンス・タスクを実行できます。
- DBMS_SQL_FIREWALLパッケージを使用したSQLファイアウォールの構成
SQL_FIREWALL_ADMIN
ロールを持っているユーザーは、DBMS_SQL_FIREWALL
PL/SQLパッケージを使用して、ルートまたはプラガブル・データベース(PDB)でSQLファイアウォールを構成できます。 - SQLファイアウォール構成への変更
ユーザーのSQLファイアウォール構成を作成した後は、必要に応じて構成を変更できます。 - 取得ログのパフォーマンスの管理
アプリケーションのワークロードによっては、SQLファイアウォールが大量の取得ログを生成する場合があります。 - SQLファイアウォール・ログのパージ
DBMS_SQL_FIREWALL.PURGE_LOG
プロシージャを使用して、SQLファイアウォールが生成するログを定期的にパージする必要があります。 - SQLファイアウォールのトラブルシューティングとモニター
トレース・ファイルを使用し、SQLファイアウォール違反をモニターするために統合監査ポリシーを作成することで、SQLファイアウォールをトラブルシューティングできます。
親トピック: SQLファイアウォールの構成
13.2.3.1 DBMS_SQL_FIREWALLパッケージを使用したSQLファイアウォールの構成
SQL_FIREWALL_ADMIN
ロールを持っているユーザーは、DBMS_SQL_FIREWALL
PL/SQLパッケージを使用して、ルートまたはプラガブル・データベース(PDB)でSQLファイアウォールを構成できます。
13.2.3.2 SQLファイアウォール構成への変更
ユーザーのSQLファイアウォール構成を作成した後は、必要に応じて構成を変更できます。
SQLファイアウォール構成に関する情報を確認するには、DBA_SQL_FIREWALL_
*データ・ディクショナリ・ビューを問い合せることができます。
表13-1に、SQLファイアウォールの構成後に実行できる操作を示します。
表13-1 SQLファイアウォールの変更手順
操作 | プロシージャ |
---|---|
SQLファイアウォールの有効化 |
|
取得の管理 |
|
許可リストの管理 |
|
許可されたコンテキストの管理 |
|
許可されたSQLの管理 |
|
SQLファイアウォール・ログ表の管理 |
|
SQLファイアウォールの無効化 |
|
13.2.3.3 取得ログのパフォーマンスの管理
アプリケーションのワークロードによっては、SQLファイアウォールが大量の取得ログを生成する場合があります。
- 既存の
LARGE_POOL_SIZE
要件に加えて、少なくとも追加の2GをLARGE_POOL_SIZE
パラメータ設定に割り当てます。 - この追加要件を含めるために、
SGA_TARGET
パラメータ設定のサイズを変更します。最終的なサイズが8G以上であることを確認します。
13.2.3.4 SQLファイアウォール・ログのパージ
DBMS_SQL_FIREWALL.PURGE_LOG
プロシージャを使用して、SQLファイアウォールが生成するログを定期的にパージする必要があります。
13.2.3.5 SQLファイアウォールのトラブルシューティングとモニター
トレース・ファイルを使用し、SQLファイアウォール違反をモニターするために統合監査ポリシーを作成することで、SQLファイアウォールをトラブルシューティングできます。
- SQLファイアウォール・トレース・ファイルの有効化または無効化
ALTER SESSION
またはALTER SYSTEM
システム権限が付与されたユーザーとして、SQLファイアウォールを使用しているPDB内にトレース・ファイルを生成できます。 - 統合監査ポリシーを使用したSQLファイアウォール違反の監査
統合監査ポリシーは、UNIFIED_AUDIT_TRAIL
データ・ディクショナリ・ビューを問い合せることで表示可能な統合監査証跡に様々なアクティビティを書き込みます。
13.2.3.5.1 SQLファイアウォール・トレース・ファイルの有効化または無効化
ALTER SESSION
またはALTER SYSTEM
システム権限が付与されたユーザーとして、SQLファイアウォールを使用しているPDB内にトレース・ファイルを生成できます。
- SQLファイアウォールに対してトレースを有効にするには、次のいずれかの文を使用します。
ALTER SESSION SET EVENTS 'TRACE SQL_FIREWALL DISK=trace_level ALTER SYSTEM SET EVENTS 'TRACE SQL_FIREWALL DISK=trace_level
この指定では、
trace_level
を次のいずれかの値に置き換えます。LOW
は、最小のトレース情報を示します。HIGH
は、より詳細なトレース情報と、LOW
によって戻される情報を示します。HIGHEST
は、最も詳細なトレース情報と、HIGH
およびLOW
によって戻される情報を示します。
- SQLファイアウォールに対してトラッキングを無効にするには、次のいずれかの文を使用します。
ALTER SESSION SET EVENTS 'TRACE SQL_FIREWALL OFF ALTER SYSTEM SET EVENTS 'TRACE SQL_FIREWALL OFF
関連トピック
親トピック: SQLファイアウォールのトラブルシューティングとモニター
13.2.3.5.2 統合監査ポリシーを使用したSQLファイアウォール違反の監査
統合監査ポリシーは、UNIFIED_AUDIT_TRAIL
データ・ディクショナリ・ビューを問い合せることで表示可能な統合監査証跡に様々なアクティビティを書き込みます。
統合監査ポリシーの作成時にSQL_FIREWALL
コンポーネントを指定することで、SQLファイアウォール固有の統合監査ポリシーを作成できます。UNIFIED_AUDIT_TRAIL
を問い合せると、FW_ACTION_NAME
列およびFW_RETURN_CODE
列を問い合せることができます。
ノート:
Oracle Databaseは、SQLファイアウォールDBMS_SQL_FIREWALL PL/SQL
PL/SQLパッケージの管理プロシージャのすべての起動を強制的に監査します。
関連トピック
親トピック: SQLファイアウォールのトラブルシューティングとモニター
13.3 SQLファイアウォールと他のOracle機能との連携
SQLファイアウォールを他のOracle機能と併用することの影響を理解しておく必要があります。
- SQLファイアウォール・メタデータでのOracle Data Pumpのエクスポートおよびインポート操作
Oracle Data Pumpを使用して、SQLファイアウォールの取得および許可リストのメタデータをエクスポートおよびインポートできます。 - SQLファイアウォールの適用からのOracle Scheduling操作の除外
ほとんどのシナリオでは、Oracle Schedulerジョブは、通常、ユーザーによって実行されないため、SQLファイアウォールの適用から除外できます。 - SQLファイアウォールとOracle Database Vault
TBA - SQLファイアウォールおよびOracle Real Application Security
SQLファイアウォールをOracle Real Application Security (Oracle RAS)とともに使用すると、XS$NULL
ユーザーのOracle RASアプリケーションからのSQL文を取得できます。 - SQLファイアウォールとOracle Database集中管理ユーザーおよびエンタープライズ・ユーザー
SQLファイアウォールの取得が有効になっている場合、SQLファイアウォールはグローバル・ユーザーのアクティビティを取得します。 - SQLファイアウォールおよびOracle Virtual Private Database
Oracle Virtual Private Databaseポリシーを実行すると、SQLファイアウォールは実行直後にSQLコマンドを取得します。 - マルチテナント環境でのSQLファイアウォール
SQLファイアウォールは、CDBルート・レベルと個々のPDBレベルの両方で影響を受けます。
親トピック: SQLファイアウォールの使用
13.3.1 SQLファイアウォール・メタデータでのOracle Data Pumpのエクスポートおよびインポート操作
Oracle Data Pumpを使用して、SQLファイアウォールの取得および許可リストのメタデータをエクスポートおよびインポートできます。
- SQLファイアウォール・メタデータでのOracle Data Pumpのエクスポートおよびインポート操作について
SQLファイアウォールは、Oracle Data Pumpと統合され、取得および許可リストのメタデータを含むSQLファイアウォール・メタデータのエクスポートおよびインポートをサポートします。 - Oracle Data PumpがSQLファイアウォールの取得または許可リストのインポートをスキップする場合
特定のケースでは、Oracle Data Pumpはインポート操作中に特定のSQLファイアウォールの取得または許可リストをスキップし、他の取得または許可リストのインポートを続行します。 - Oracle Data Pumpを使用したSQLファイアウォール・メタデータのエクスポートおよびインポート
expdp
およびimpdp
コマンドを使用して、SQLファイアウォールの取得および許可リストのメタデータをエクスポートおよびインポートできます。
13.3.1.1 SQLファイアウォール・メタデータでのOracle Data Pumpのエクスポートおよびインポート操作について
SQLファイアウォールはOracle Data Pumpと統合され、キャプチャおよび許可リストのメタデータを含め、SQLファイアウォール・メタデータのエクスポートおよびインポートをサポートします。
SQLファイアウォールはOracle Data Pumpと統合され、キャプチャおよび許可リストのメタデータを含め、SQLファイアウォール・メタデータのエクスポートおよびインポートをサポートします。これは通常、非本番データベースでトレーニングを1回実行でき、非本番トレーニング・ステージ中に生成された許可リストを使用して、複数の本番データベースでSQLファイアウォールを有効にできるシナリオで必要です。
Oracle Databaseでは、ソース・データベースの許可リストをターゲット・データベースの既存の許可リストにマージしないかぎり、エクスポートおよびインポート操作中でも取得および許可リストのステータスが保持されます。たとえば、エクスポート時にソース・データベースで取得が有効になっている場合、インポート操作の完了後はターゲット・データベースでも取得が有効になります。これは、インポート操作の前にターゲット・データベースに同じユーザーの許可リストがない場合に許可リストをインポートする場合と同様です。
ソース・データベースの許可リストをターゲット・データベースの既存の許可リストにマージする場合、ターゲット・データベースの許可リストの設定(status
、top_level_only
、enforce
、block
など)は、インポート操作前と同じままになります。許可されたSQLおよびコンテキストのみがマージされます。
Oracle Data Pumpの場合、Oracleは、既存のすべてのSQLファイアウォール・メタデータ(取得および許可リスト)全体のエクスポートまたはインポートをサポートしています。Oracleでは、Oracle Data Pumpを介した特定の取得または特定の許可リストのエクスポートまたはインポートはサポートされていません。
あるユーザーの許可リストのみを特定のデータベースから別のユーザーにエクスポートまたはインポートする場合は、DBMS_SQL_FIREWALL.EXPORT_ALLOW_LIST
またはDBMS_SQL_FIREWALL.IMPORT_ALLOW_LIST
プロシージャを使用します。(この2つのプロシージャはOracle Data Pumpに依存せず、独立して使用できます。)Oracleでは、SQLファイアウォール・ログ(取得および違反ログ)のエクスポートおよびインポートはサポートされていません。
13.3.1.2 Oracle Data PumpがSQLファイアウォールの取得または許可リストのインポートをスキップする場合
特定のケースでは、Oracle Data Pumpはインポート操作中に特定のSQLファイアウォールの取得または許可リストをスキップし、他の取得または許可リストのインポートを続行します。
これらのケースを次に示します。
-
ターゲット・ユーザーがターゲット・データベースに存在しない場合、存在しないユーザーの取得および許可リストはインポートされません。
-
許可リストがターゲット・データベースに存在しない現行ユーザーを参照している場合、この許可リストはインポートされません。
-
許可リストをインポートする場合に、同じユーザーの許可リストがターゲット・データベースにすでに存在し、その
top_level_only
設定がインポート対象の許可リストと異なる場合、許可リストはインポートされません。 -
許可リストをインポートする場合に、同じユーザーの取得がターゲット・データベースにすでに存在し、その
top_level_only
設定がインポート対象の許可リストと異なる場合、その許可リストはインポートされません。 -
インポート対象の許可リストが有効になっており、ターゲット・データベースで同じユーザーに対して取得が有効になっているが、許可リストが無効になっていない場合、同じユーザーに対して有効な取得と有効な許可リストを同時に存在させないために、その許可リストはインポートされません。
-
同じユーザーに対してインポート対象の取得がターゲット・データベースにすでに存在する場合、その取得はインポートされません。
-
インポート対象の取得が有効になっており、ターゲット・データベースで同じユーザーに対して許可リストが有効になっている場合、同じユーザーに対して有効な取得と有効な許可リストを同時に存在させないために、その取得はインポートされません。
-
取得をインポートする場合に、同じユーザーの許可リストがターゲット・データベースにすでに存在し、その
top_level_only
設定がインポート対象の取得と異なる場合、その取得はインポートされません。
13.3.1.3 Oracle Data Pumpを使用したSQLファイアウォール・メタデータのエクスポートおよびインポート
expdp
およびimpdp
コマンドを使用して、SQLファイアウォールの取得および許可リストのメタデータをエクスポートおよびインポートできます。
- SQLファイアウォールが使用されているサーバーにログインします。
- コマンドラインで、Oracle Data Pumpのエクスポートまたはインポート操作を実行します。
- SQLファイアウォール・メタデータをエクスポートするには、次の構文を使用します。
expdp user_name@pdb_name FULL=Y DIRECTORY=dumpfile_dir INCLUDE=SQL_FIREWALL dumpfile=dumpfile_name.dmp LOGFILE=filename.log
詳細は、次のとおりです。
FULL=Y
は全体エクスポート・モードを有効にします。SQLファイアウォールのメタデータは、全体エクスポート・モードでのみエクスポートされます。INCLUDE=SQL_FIREWALL
は、INCLUDE
またはEXCLUDE
フィルタで使用できます。このタグはオプションです。これにより、あるデータベースから別のデータベースにSQLファイアウォール・メタデータのみをエクスポートおよびインポートできます。
次に例を示します。
expdp "hr@hr_pdb" FULL=Y DIRECTORY=sql_fw_dumpfiles INCLUDE=SQL_FIREWALL DUMPFILE=sql_fw_app.dmp LOGFILE=sql_fw_app.log Enter password: password
- SQLファイアウォール・メタデータをインポートするには、次のようにします。
impdp user_name@pdb_name FULL=Y DIRECTORY=dumpfile_dir INCLUDE=SQL_FIREWALL dumpfile=dumpfile_name.dmp LOGFILE=filename.log
次に例を示します。
impdp "hr@hr_pdb" FULL=Y DIRECTORY=dumpfile_dir INCLUDE=SQL_FIREWALL dumpfile=sql_fw_app.dmp LOGFILE=sql_fw_app.log Enter password: password
- SQLファイアウォール・メタデータをエクスポートするには、次の構文を使用します。
13.3.2 SQLファイアウォールの適用からのOracle Scheduling操作の除外
ほとんどのシナリオでは、Oracle Schedulerジョブは、通常、ユーザーによって実行されないため、SQLファイアウォールの適用から除外できます。
デフォルトでは、Oracle Schedulerジョブは除外されます。次の手順を使用して、FEATURE
パラメータをDBMS_SQL_FIREWALL.SCHEDULER_JOB
定数に設定することで、Oracle Schedulerの操作中にSQLファイアウォールの実行を有効または無効にできます。
DBMS_SQL_FIREWALL.INCLUDE
を使用すると、SQLファイアウォールは、Oracle Schedulerの操作中にSQLを取得したり、許可リストを適用できます。DBMS_SQL_FIREWALL_EXCLUDE
を使用すると、SQLファイアウォールは、Oracle Schedulerの操作中にSQLを取得したり、許可リストを適用することができなくなります。
次に例を示します。
EXEC DBMS_SQL_FIREWALL.EXCLUDE (DBMS_SQL_FIREWALL.SCHEDULER_JOB);
13.3.3 SQLファイアウォールとOracle Database Vault
TBA
- Oracle Database VaultとSQLファイアウォールの機能の比較
構成する保護のタイプに応じて、Oracle Database VaultとSQLファイアウォールのいずれかまたは両方を使用できます。 - Oracle Database Vault環境でのSQLファイアウォールの使用の認可
Oracle Database Vault環境では、SQLファイアウォールを構成するユーザーにOracle Database Vault固有の認可が必要です。
13.3.3.1 Oracle Database VaultとSQLファイアウォールの機能の比較
構成する保護のタイプに応じて、Oracle Database VaultとSQLファイアウォールのいずれかまたは両方を使用できます。
Database Vaultを使用すると、レルムおよびコマンド・ルールを使用して、機密オブジェクトへのアクセス、クリティカル・コマンドの実行、およびユーザーに関連付けられている任意の数の識別可能な属性(時刻、IPアドレス、ホスト名、プログラム名など)などの信頼できない要因からのSQL接続をブロックできます。Database Vault環境では、SQLファイアウォールを使用して、データベース・アカウントの信頼できるデータベース接続パスが関連付けられているSQLコマンドの許可リストを取得することで、この保護を拡張できます。その後、見えないSQLトラフィックをログに記録(およびオプションでブロック)できます。SQLファイルウォールの強制では、承認されたSQL文および接続を、認可されていないSQLトラフィックと区別できます。認可されていないSQLトラフィックは、レルムおよびコマンド・ルールが機密オブジェクトへのアクセスを明示的に認可されていないかぎり防ぐために提供する保護レイヤーに追加されます。
次の表に、Database Vaultレルムとコマンド・ルールおよびSQLファイルウォールを使用して保護を適用する方法の比較を示します。
表13-2 Oracle Database VaultとSQLファイルウォールの保護の比較
ユースケース | レルム | コマンド・ルール | SQLファイアウォール |
---|---|---|---|
データベース・スキーマの保護 |
はい、従来のレルムまたは必須レルムでは、データへのアクセスを制限できます。
|
はい、スキーマ・オブジェクトに対するDML文またはDDL文 |
いいえ |
データベース・ロールの保護 |
はい、従来のレルムまたは必須レルムがロールを保護できます。 |
はい、特定のロールに対して |
いいえ |
データベース・オブジェクトの保護 |
はい、従来のレルムまたは必須レルムでは、データへのアクセスを制限できます。
|
はい、スキーマ・オブジェクトに対するDML文またはDDL文
|
いいえ |
個々のSQL文の保護 |
いいえ |
はい。スキーマまたは個々のスキーマ・オブジェクトに対する制御文です。 |
はい。明示的に許可されているSQL文を除くすべてのSQL文をブロックします。 |
許可リストおよびアプリケーションSQLトラフィックの保護 |
いいえ |
いいえ |
はい。明示的に許可されているSQL文を除くすべてのSQL文をブロックします。 |
安全性の低いアカウントのリスクから保護 |
はい、プログラムでチェックできる要素に基づいて、信頼できるパス条件を確立します。 |
はい、 |
はい、信頼できないクライアントIP、プログラムおよびOSユーザー名からのセッションをブロックします |
SQLインジェクション・リスクからデータベース・ユーザーを保護 |
いいえ |
いいえ |
はい、データベース・ユーザーごとに許可リストSQLファイアウォール・ポリシーを作成し、適用します。 |
13.3.3.2 Oracle Database Vault環境でSQLファイアウォールを使用するための認可
Oracle Database Vault環境では、SQLファイアウォールを構成するユーザーは、Oracle Database Vault固有の認可を受ける必要があります。
Database Vaultが有効な場合、SQLファイアウォールの管理(つまり、DBMS_SQL_FIREWALL
パッケージの起動)には、SQLファイアウォール管理者がADMINISTER SQL FIREWALL
システム権限に加えてDatabase Vault固有の認可を持っている必要があります。この要件は、信頼できるユーザーのみがDatabase Vault環境でSQLファイアウォールを管理できるようにするためです。
SQLファイアウォール管理者は、Database Vault環境でDV_OWNER
、DV_ADMIN
またはDV_ACCTMGR
ロールを持つユーザーに対して取得を許可または許可しないようにできます。Database Vault操作制御が有効な場合、共通ユーザーが例外リストに含まれている場合を除き、共通ユーザーはローカル・ユーザーでのSQLファイアウォール(つまり、取得および許可リストを管理するためのDBMS_SQL_FIREWALL
プロシージャ)の使用をブロックされます。
13.3.4 SQLファイアウォールとOracle Real Application Security
SQLファイアウォールをOracle Real Application Security (Oracle RAS)とともに使用すると、XS$NULL
ユーザーのOracle RASアプリケーションからのSQL文を取得できます。
SQLファイアウォール取得操作の完了後に、XS$NULL
ユーザーの許可リストを生成および強制できます。ただし、SQLファイアウォールでは、Oracle RASエンド・ユーザー・アイデンティティの取得および強制操作は実行されません。
13.3.5 SQLファイアウォールとOracle Database集中管理ユーザーおよびエンタープライズ・ユーザー
SQLファイアウォール取得が有効な場合、SQLファイアウォールはグローバル・ユーザーのアクティビティを取得します。
ただし、SQLファイアウォールでは、エンタープライズ・ユーザー・アイデンティティ(たとえば、Active Directory (CMU-AD)ユーザー、Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM)ユーザー、Oracle Internet Directory (OID)ユーザー、Microsoft Azure Active Directoryユーザー)は区別されません。
13.3.6 SQLファイアウォールとOracle Virtual Private Database
Oracle Virtual Private Databaseポリシーが実行されると、SQLファイアウォールは実行直後にSQLコマンドを取得します。
ただし、SQLファイアウォールでは、データベース・カーネルによる変更または変換(ビュー、シノニム、SQLマクロ拡張、仮想プライベート・データベースの強制など)は考慮されません。許可リストを策定するために、予想されるすべての受信SQL文を取得するようにSQLファイアウォールをトレーニングする必要があります。
13.3.7 マルチテナント環境でのSQLファイアウォール
SQLファイアウォールは、CDBルート・レベルと個々のPDBレベルの両方で影響を受けます。
CDBルートで:
- CDBルート・コンテナでSQLファイアウォールを有効にしてから、SQLファイアウォール・ポリシーの作成、SQLファイアウォールの有効化または無効化、取得の開始または停止、許可リストの有効化または無効化を行うことができます。これらの設定は、CDBルートにのみ適用されます。
- Oracle Database Vault操作制御環境では、SQLファイアウォールの使用に制限はありません。
個々のPDB:
- 個々のPDBでSQLファイアウォールを有効にしてから、SQLファイアウォール・ポリシーの作成、SQLファイアウォールの有効化または無効化、取得の開始または停止、許可リストの有効化または無効化を行うことができます。これらの設定は現在のPDBにのみ適用されます。
- Database Vault操作制御環境では、共通ユーザーはローカル・ユーザーの取得を開始または停止したり、ローカル・ユーザーの許可リストを有効または無効にすることはできません。
13.4 SQLファイアウォールのデータ・ディクショナリ・ビューおよびサンプル問合せ
Oracleには、構成したSQLファイアウォール保護に関する様々な種類の情報を検索できる一連のデータ・ディクショナリ・ビューが用意されています。
- SQLファイアウォールのデータ・ディクショナリ・ビュー
Oracle Databaseには、SQLファイアウォール構成に関する情報を提供する一連のデータ・ディクショナリ・ビューが用意されています。 - ユーザーの許可されたSQLとアクセスされたオブジェクトを検索する問合せ
DBA_SQL_FIREWALL_ALLOWED_SQL
データ・ディクショナリ・ビューには、ユーザーが使用できるSQLが表示されます。 - ユーザーの許可されたSQLとアクセスされたオブジェクトを検索する問合せ
DBA_SQL_FIREWALL_ALLOWED_IP_ADDR
データ・ディクショナリ・ビューには、ユーザーが使用できるIPアドレスが表示されます。 - ユーザーのSQLファイアウォール違反を検索する問合せ
DBA_SQL_FIREWALL_VIOLATIONS
データ・ディクショナリ・ビューには、ユーザーが犯したSQLファイアウォール違反が表示されます。
親トピック: SQLファイアウォールの使用
13.4.1 SQLファイアウォールのデータ・ディクショナリ・ビュー
Oracle Databaseには、SQLファイアウォール構成に関する情報を提供する一連のデータ・ディクショナリ・ビューが用意されています。
表13-3に、これらのデータ・ディクショナリ・ビューを示します。
表13-3 SQLファイアウォール情報を表示するデータ・ディクショナリ・ビュー
ビュー | 説明 |
---|---|
|
ユーザーの許可リストのステータスおよび生成日を示します |
|
ユーザーに対して許可されているIPアドレスをリストします |
|
ユーザーに対して許可されているオペレーティング・システム・プログラムをリストします |
|
ユーザーに対して許可されているオペレーティング・システム・ユーザーをリストします |
|
ユーザーの許可されたSQL文、許可されたSQLのSQL ID、および許可リスト・バージョンに関する情報をリストします |
|
ユーザーのSQLファイアウォール構成のログ情報(データベース・ユーザー名、SQLテキスト、アクセスされたオブジェクト、SQLファイアウォール・セッションIDなど)を示します |
|
SQLファイアウォール・キャプチャのステータス(有効かどうかなど)を示します |
|
SQLファイアウォール・セッションに関する情報(セッションID、データベース・ユーザー名、クライアント・プログラムなど)を示します |
|
SQLテキスト、コマンド・タイプ、SQL署名、アクセスされたオブジェクト、文字セットなどのSQLログに関する情報をリストします |
|
SQLファイアウォール構成のステータス(有効かどうか、タイムスタンプなど)を示します |
|
SQLファイアウォール違反に関する詳細レポート(アクセスされたオブジェクト、SQLが実行されたユーザー、アクションがブロックされたか許可されたかなどの情報を含む)を示します |
関連トピック
13.4.2 ユーザーの許可されたSQLおよびアクセスされたオブジェクトを検索する問合せ
DBA_SQL_FIREWALL_ALLOWED_SQL
データ・ディクショナリ・ビューには、ユーザーが使用できるSQLが表示されます。
次に例を示します。
SELECT SQL_TEXT, ACCESSED_OBJECTS FROM DBA_SQL_FIREWALL_ALLOWED_SQL WHERE USERNAME = 'HR'; SQL_TEXT ACCESSED_OBJECTS ----------------------------------- ------------------ SELECT COUNT(*) FROM HR.EMPLOYEES "HR"."EMPLOYEES'
関連トピック
13.4.3 ユーザーの許可されたIPアドレスを検索する問合せ
DBA_SQL_FIREWALL_ALLOWED_IP_ADDR
データ・ディクショナリ・ビューには、ユーザーが使用できるIPアドレスが表示されます。
次に例を示します。
SELECT IP_ADDRESS FROM DBA_SQL_FIREWALL_ALLOWED_IP_ADDR WHERE USERNAME = 'HR'; IP_ADDRESS ------------ 192.0.2.1
関連トピック
13.4.4 ユーザーのSQLファイアウォール違反を検索する問合せ
DBA_SQL_FIREWALL_VIOLATIONS
データ・ディクショナリ・ビューには、ユーザーが犯したファイアウォール違反が表示されます。
次に例を示します。
SELECT SQL_TEXT, OCCURRED_AT, FIREWALL_ACTION FROM DBA_SQL_FIREWALL_VIOLATIONS WHERE USERNAME = 'HR'; SQL_TEXT OCCURRED_AT FIREWALL_ACTION ---------------------------------- ---------------------------------- –-------------- SELECT COUNT(*) FROM HR.EMPLOYEES 12-OCT-23 10.30.02.238383 AM +00:00 BLOCKED
関連トピック