権限分析では、ユーザーが使用中および未使用の権限とロールが動的に分析されます。
内容は次のとおりです。
Oracle Database Vault with Oracle Database Release 12cには、権限分析と呼ばれる機能が組み込まれており、アプリケーションおよびデータベース操作のセキュリティを向上させることができます。
内容は次のとおりです。
権限分析では、ユーザー・アカウントまたはデータベースが長期にわたって使用する権限およびロールの動的(静的ではない)分析が実行されます。
動的分析であるため、実際に使用された、実際の権限およびロールが取得されます。
権限分析は、実行時にデータベース・ユーザーおよびアプリケーションによって使用される権限を取得します。これにより、使用されていない権限付与およびその他の変更を取り消して、ユーザーに必要なアクセスをより効果的に反映することができます。権限分析は、最小限の権限履行を実装するために必要となる作業を簡略化します。
Oracle Databaseカーネル内で実行され、使用されている権限と使用されていない権限を特定することによってアプリケーションの攻撃面を縮小し、操作のセキュリティを強化できるようにします。権限分析は、Oracle Database Release 12cをインストールした後、追加の構成手順を実行しなくても使用できます。
権限分析サポートは、Oracle Enterprise Manager Cloud Control 12cリリース3プラグイン・アップデート1 (12.1.0.3)から利用できます。
権限分析は、プリコンパイル済データベース・オブジェクトに使われた権限を取得するために使用できます。
これらのオブジェクトの例としては、PL/SQLパッケージ、プロシージャ、ファンクション、ビュー、トリガ、Javaクラスおよびデータなどがあります。
このような権限は、ストアド・プロシージャがコールされると実行時に使用されないことがあるため、データベース全体の取得について結果を生成するときに、実行時に取得された権限とともに収集されます。権限は、プリコンパイル済データベース・オブジェクトまたは実行時取得で使用されていない場合、使用されていない権限として扱われ、実行時取得名の下に保存されます。権限がプリコンパイル済データベース・オブジェクトに使用されている場合は、取得名ORA$DEPENDENCY
の下に保存されます。権限が実行時に取得された場合は、実行時取得名の下に保存されます。プリコンパイル済データベース・オブジェクトと実行時使用の両方について使用されている権限を把握する場合は、ORA$DEPENDENCY
と実行時の両方の取得を問い合せる必要があります。使用されていない権限の場合、実行時取得名で問い合せるだけです。
権限分析を使用できるプリコンパイル済オブジェクトの詳細なリストを確認するには、ALL_DEPENDENCIES
データ・ディクショナリ・ビューのTYPE
列を問い合せます。
権限分析を使用するには、CAPTURE_ADMIN
ロールが付与されている必要があります。
DBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージを使用して、権限取得を管理します。権限分析から提供されるデータ・ディクショナリ・ビューを使用して、権限の使用を分析します。
様々なタイプの権限分析ポリシーを作成して、特定の目的を実現できます。
ロールベースの権限使用の取得。ロールのリストを提供する必要があります。リストのロールがデータベース・セッションで有効な場合、そのセッションの使用されている権限が取得されます。
コンテキストベースの権限使用の取得。SYS_CONTEXT関数でのみ、ブール式を指定する必要があります。条件が
TRUE
と評価されると、使用されている権限が取得されます。
ロールおよびコンテキストベースの権限使用の取得。有効なロールのリストと条件のSYS_CONTEXT
ブール式の両方を指定する必要があります。このようなロールのいずれかがセッションで有効であり、指定されたコンテキスト条件が満たされると、権限分析によって権限の使用の取得が開始されます。
データベース全体の権限の取得。権限分析ポリシーにタイプを指定しない場合、ユーザーSYS
の権限を除いて、データベースの使用されている権限が取得されます。(条件なしで有効であるため、無条件の分析とも呼ばれます。)
次の制約に注意してください:
一度に有効にできる権限分析ポリシーは1つのみです。唯一の例外は、ロールやコンテキスト属性ドリブン分析ポリシーなどのデータベース全体以外の権限分析ポリシーと同時にデータベース全体の権限分析ポリシーを有効化できることです。
SYS
ユーザーの権限は分析できません。
権限分析には権限への付与パスが表示されますが、どの付与パスを維持するかは推奨されません。
ロール、ユーザーまたはオブジェクトが削除されると、権限分析データ・ディクショナリ・ビューでこれらについての権限取得を反映する値も削除されます。
データベースにアクセスするアカウントの権限は、アプリケーションに絶対に必要な権限だけに制限する必要があります。
ただし、特にサード・パーティがアプリケーションを開発する場合、必要以上の権限が便宜上アプリケーション接続プール・アカウントに付与される可能性があります。さらに、一部の開発者は、システム権限およびアプリケーションのオブジェクト権限をPUBLIC
ロールに付与します。
たとえば、アプリケーション・データから選択してアプリケーション・プロシージャを実行するには、システム権限SELECT ANY TABLE
およびEXECUTE ANY PROCEDURE
をアプリケーション・アカウントappsys
に付与します。これで、appsys
は、意図しない場合でもアプリケーション以外のデータにアクセスできます。この状況で、ユーザーappsys
で権限の使用状況を分析し、結果に基づき必要に応じて権限を取り消したり付与できます。
アプリケーションの開発段階では、いくつもの強力なシステム権限とロールをアプリケーション開発者に付与する管理者もいます。
管理者がこのような形で権限を付与するのは、開発段階ではアプリケーション開発者にどのような権限が必要か分からないことがあるからです。
アプリケーションが開発されて稼働すると、アプリケーション開発者に必要な権限とそうでない権限が明確になります。この時点で、セキュリティ管理者は不必要な権限の取消しを開始できます。ただし、アプリケーションが現在問題なく稼働しているため、アプリケーション開発者がこの考えに抵抗する場合があります。管理者は、権限分析を使用して、アプリケーションで使用されている各権限を調べることで、権限を取り消した場合に、アプリケーションの稼働を継続できるかを確認できます。
たとえば、app_owner
は、データベースに接続するアプリケーションのアプリケーション・データベース・ユーザーです。ユーザーapp_owner
は、OE
、SH
およびPM
スキーマの表を問い合せる必要があります。これらのスキーマの各表のSELECT
オブジェクト権限を付与するかわりに、セキュリティ管理者は、SELECT ANY TABLE
権限をapp_owner
に付与します。しばらくしてから、新しいスキーマHR
が作成され、機密データがHR.EMPLOYEES
表に挿入されます。ユーザーapp_owner
にはSELECT ANY TABLE
権限があるため、この表を問い合せて機密データにアクセスできますが、これはセキュリティ上問題があります。システム権限(特にANY
権限)を付与するかわりに、特定の表に対するオブジェクト権限を付与する方がはるかによい方法です。
SQL*PlusまたはEnterprise Manager Cloud Controlのいずれかで権限分析ポリシーの作成および管理を行うことができます。
内容は次のとおりです。
Oracle Enterprise Manager Cloud ControlまたはDBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージを使用して、権限を分析できます。
そのためには、CAPTURE_ADMIN
ロールが付与されている必要があります。DBMS_PRIVILEGE_CAPTURE
パッケージでは、権限分析ポリシーを作成、有効化、無効化および削除できます。DBA_*
ビューで表示できる権限の使用状況を示すレポートも生成します。
関連項目:
DBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
DBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシーを作成できます。
内容は次のとおりです。
ポリシーが作成されると、Oracleデータ・ディクショナリおよびSYS
スキーマに配置されます。
ただし、それを削除できるのは、ポリシーを作成したユーザーとユーザーSYS
です。権限使用の分析を開始できるように、ポリシー作成後に手動で有効にする必要があります。Oracle Enterprise Manager Cloud Controlを使用する場合は、Enterprise Managerリリース12.1.0.3以上を使用する必要があります。
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
プロシージャは、権限分析ポリシーを作成します。
権限分析ポリシーを作成した後、DBA_PRIV_CAPTURES
データ・ディクショナリ・ビューのリストで確認できます。
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
プロシージャに次の構文を使用します。
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( name VARCHAR2, description VARCHAR2 DEFAULT NULL, type NUMBER DEFAULT DBMS_PRIVILEGE_CAPTURE.G_DATABASE, roles ROLE_NAME_LIST DEFAULT ROLE_NAME_LIST(), condition VARCHAR2 DEFAULT NULL);
次のように指定します。
name
: 作成する権限分析ポリシーの名前を指定します。この名前は必ず一意にし、128文字以下にしてください。名前には空白を使用できますが、参照するときは必ず一重引用符でその名前を囲む必要があります。既存のポリシーの名前を確認するには、DBA_PRIV_CAPTURES
ビューのNAME
列を問い合せます。
description
: 大/小文字混在で最大1024文字で権限分析ポリシーの目的を説明します。オプションです。
type
: 取得条件のタイプを指定します。type
パラメータを省略する場合、デフォルトはDBMS_PRIVILEGE_CAPTURE.G_DATABASE
となります。オプションです。
次のいずれかのタイプを入力します。
DBMS_PRIVILEGE_CAPTURE.G_DATABASE
: ユーザーSYS
の権限を除いて、データベース全体で使用されている権限をすべて取得します。
DBMS_PRIVILEGE_CAPTURE.G_ROLE
: ロールが有効になっているセッションの権限を取得します。type
パラメータのDBMS_PRIVILEGE_CAPTURE.G_ROLE
を入力する場合、roles
パラメータも指定する必要があります。ロールが複数の場合、各ロール名をカンマで分けます。
DBMS_PRIVILEGE_CAPTURE.G_CONTEXT
: condition
パラメータで指定された条件がTRUE
と評価されているセッションの権限を取得します。type
パラメータのDBMS_PRIVILEGE_CAPTURE.G_CONTEXT
を入力する場合、condition
パラメータも指定する必要があります。
DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT
: ロールが有効になっており、コンテキスト条件がTRUE
と評価されているセッションの権限を取得します。type
パラメータのDBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT
を入力する場合、roles
とcondition
の両方のパラメータも指定する必要があります。
roles
: 使用された権限が分析されるロールを指定します。つまり、指定されたロールのいずれかの権限が使用される場合、権限が分析されます。type
引数にDBMS_PRIVILEGE_CAPTURE.G_ROLE
またはDBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT
を指定する場合、この引数を指定する必要があります。入力する各ロールは、データベースに存在する必要があります。(DBA_ROLES
データ・ディクショナリ・ビューを問い合せて、既存のロールを確認できます。)複数のロールでは、可変長配列型role_name_list
を使用してロール名を入力します。最大10のロールを指定できます。
たとえば、2つのロールを指定するには、次のようにします。
roles => role_name_list('role1', 'role2'),
condition
: 最大4000文字でブール式を指定します。type
引数にDBMS_PRIVILEGE_CAPTURE.G_CONTEXT
またはDBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT
を指定する場合、この引数を指定する必要があります。関係演算子(==
、>、>=
、<
、<=
、<>
、BETWEEN
およびIN
)を使用したSYS_CONTEXT
式のみがこのブール式で許可されます。
condition
式の構文は次のとおりです。
predicate::= SYS_CONTEXT(namespace, attribute) relop constant_value | SYS_CONTEXT(namespace, attribute) BETWEEN constant_value AND constant_value | SYS_CONTEXT(namespace, attribute) IN {constant_value (,constant_value)* } relop::= = | < | <= | > | >= | <> context_expression::= predicate | (context_expression) AND (context_expression) | (context_expression) OR (context_expression )
たとえば、conditionを使用してIPアドレス192.0.2.1
を指定するには、次のようにします。
condition => 'SYS_CONTEXT(''USERENV'', ''IP_ADDRESS'')=''192.0.2.1''';
* 必要な数の定数値を追加できます(たとえば、IN {
constant_value1
}
やIN {
constant_value1
,
constant_value2
,
constant_value3
}
など)。
「権限分析ポリシーの有効化」の説明に従って、権限分析ポリシーを作成した後に有効化する必要があります。
様々な権限分析ポリシーを作成できます。
内容は次のとおりです。
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
は、データベース全体の権限を分析するために使用できます。
例4-1は、データベースのすべての権限の使用を記録するために、DBMS_PRIVILEGE_CAPTUREパッケージを使用して権限分析ポリシーを作成し、有効化する方法を示しています。
例4-1 データベース全体の権限の権限分析
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( name => 'db_wide_capture_pol', description => 'Captures database-wide privileges', type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE); END; / EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('db_wide_capture_pol');
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
プロシージャは、複数ロールの権限の使用状況の分析に使用できます。
例4-2は、2つのロールの権限の使用状況の分析方法を示しています。
例4-2 2つのロールの権限の使用状況の権限分析
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( name => 'dba_roles_capture_pol', description => 'Captures DBA and LBAC_DBA role use', type => DBMS_PRIVILEGE_CAPTURE.G_ROLE, roles => role_name_list('dba', 'lbac_dba')); END; / EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('dba_roles_capture_pol');
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
プロシージャは、分析用に権限を取得するために使用できます。
例4-3は、SQL*Plusの実行に使用される権限の分析方法を示しています。
例4-3 SQL*Plus使用中の権限の権限分析
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( name => 'sqlplus_capture_pol', description => 'Captures privilege use during SQL*Plus use', type => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT, condition => 'SYS_CONTEXT(''USERENV'', ''MODULE'')=''sqlplus'''); END; / EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('sqlplus_capture_pol');
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
は、ユーザーがSQL*Plusを実行している時のユーザー・アクセス分析に使用できます。
例4-4は、SQL*Plusの実行時にセッション・ユーザーPSMITH
が使用する権限の分析方法を示しています。
例4-4 SQL*Plusアクセス中のPSMITH権限の権限分析
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( name => 'psmith_sqlplus_analysis_pol', description => 'Analyzes PSMITH role priv use for SQL*Plus module', type => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT, condition => 'SYS_CONTEXT(''USERENV'', ''MODULE'')=''sqlplus'' AND SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''PSMITH'''); END; / EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('psmith_sqlplus_analysis_pol');
DBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシーを有効化できます。
内容は次のとおりです。
権限分析ポリシーを作成したら、そのポリシーを有効化する必要があります。
有効にすると、条件を満たす場合に権限分析ポリシーが権限の使用状況の記録を開始します。任意の時点で、データベースの1つの権限分析ポリシーのみ有効化できます。唯一の例外は、タイプDBMS_PRIVILEGE_CAPTURE.G_DATABASE
の権限分析ポリシーを異なるタイプの権限分析と同時に有効化できることです。
データベースの再起動は、権限分析のステータスを変更しません。たとえば、データベースの停止前に権限分析ポリシーを有効化すると、このポリシーは、データベースの停止後および再起動後に継続して有効です。
DBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシーを無効化できます。
内容は次のとおりです。
権限分析レポートを生成する前に、権限分析ポリシーを無効化する必要があります。
ポリシーを無効化すると、権限は記録されなくなります。権限分析ポリシーの無効化は、権限分析ポリシーの無効化の前後にログオンしたユーザーに対して直接有効になります。
DBMS_PRIVILEGE_CAPTURE
PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシー・レポートを生成できます。
内容は次のとおりです。
権限分析ポリシーが無効になると、レポートを生成できます。
Enterprise Manager Cloud Controlでは、「権限分析」ページの「アクション」メニューからレポートを参照でき、ここから、必要に応じてロールおよび権限の取消しと再付与を行います。レポート結果をSQL*Plusに表示するには、「権限分析ポリシーおよびレポート・データ・ディクショナリ・ビュー」のデータ・ディクショナリ・ビューを問い合せます。権限分析プロセス中に権限を使用してレポートを生成する前に取り消す場合、権限付与パスなしで権限が使用された権限として引き続きレポートされます。
権限分析レポートの中にある権限を使って新しいロールを作成し、そのロールをユーザーに付与することができます。
内容は次のとおりです。
Enterprise Manager Cloud Controlを使用して、ロールおよび権限をユーザーに対して取り消したり、再付与したりできます。
権限分析レポートの結果に基づいて、ユーザーに対して権限を取り消したり、再付与するスクリプトを生成できます。
内容は次のとおりです。
システムやオブジェクトに対する未使用の権限およびロールの一括取消しを実行するためのスクリプトを、権限分析の生成後にダウンロードできます。
後で、これらの権限をユーザーに再付与することが必要になった場合は、再付与スクリプトを生成できます。再付与スクリプトを生成するには、対応する取消しスクリプトが必要です。
開発環境またはテスト環境で取消スクリプトを実行します。Oracleによって提供されているアカウントおよびロールから権限およびロールを取り消すことはできないということを知っておいてください。
このチュートリアルでは、DBA
ロールを持ち、データベースのチューニング操作を行うユーザーの権限使用を分析する方法を示します。
内容は次のとおりです。
Oracle Databaseには、分析した権限に関する情報を示すデータ・ディクショナリ・ビューが用意されています。
表4-1に、これらのデータ・ディクショナリ・ビューを示します。
表4-1 権限分析情報を表示するデータ・ディクショナリ・ビュー
ビュー | 説明 |
---|---|
|
既存の権限分析ポリシーの情報をリストします |
|
レポートされた権限分析ポリシーに使用された権限をリストします |
|
レポートされた権限分析ポリシーに使用されていない権限をリストします |
|
レポートされた権限分析ポリシーに使用されたオブジェクト権限をリストします。オブジェクト付与パスを含みません。 |
|
レポートされた権限分析ポリシーに使用されていないオブジェクト権限をリストします。オブジェクト権限付与パスを含みません。 |
|
レポートされた権限分析ポリシーに使用されたオブジェクト権限をリストします。オブジェクト権限付与パスを含みます。 |
|
レポートされた権限分析ポリシーに使用されていないオブジェクト権限をリストします。オブジェクト権限付与パスを含みます。 |
|
レポートされた権限分析ポリシーに使用されたシステム権限をリストします。システム権限付与パスを含みません。 |
|
レポートされた権限分析ポリシーに使用されていないシステム権限をリストします。システム権限付与パスを含みません。 |
|
レポートされた権限分析ポリシーに使用されたシステム権限をリストします。システム権限付与パスを含みます。 |
|
レポートされた権限分析ポリシーに使用されていないシステム権限をリストします。システム権限付与パスを含みます |
|
レポートされた権限分析ポリシーに使用された |
|
レポートされた権限分析ポリシーに使用されたユーザー権限をリストします。ユーザー権限付与パスを含みません。 |
|
レポートされた権限分析ポリシーに使用されていないユーザー権限をリストします。ユーザー権限付与パスを含みません。 |
|
レポートされた権限分析ポリシーに使用されたユーザー権限をリストします。ユーザー権限付与パスを含みます。 |
|
レポートされた権限分析ポリシーに使用されていない権限をリストします。ユーザー権限付与パスを含みます。 |
関連項目:
これらのデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください