この章の内容は次のとおりです。
Oracle Database Vaultでは、Oracle Database Vaultルール・セットで有効にするセキュア・アプリケーション・ロールを作成できます。通常のOracle Databaseセキュア・アプリケーション・ロールはカスタムPL/SQLプロシージャによって有効になります。セキュア・アプリケーション・ロールは、ユーザーによるアプリケーション外からのデータへのアクセスを阻止します。これにより、ユーザーはロールに付与されているアプリケーション権限のフレームワーク内での作業を強制されます。
ルール・セットを基準にしてロールのデータベース・アクセスを行う利点は、データベース・セキュリティ・ポリシーをすべてのアプリケーションに保存するのではなく、中央の1つの場所に保存できることです。ルール・セットに基づいたロールにより、一貫性と柔軟性を兼ね備えたメソッドを作成し、ロールが提供するセキュリティ・ポリシーを実行できます。この方法では、アプリケーション・ロールのセキュリティ・ポリシーを更新する必要がある場合、1つの場所、つまりルール・セットで行うことができます。さらに、ユーザーがどのようにしてデータベースに接続しても、ルール・セットがロールにバインドされているため、結果は同じです。Oracle Database Vaultでは、起動者の権限を使用するためのセキュア・アプリケーション・ロールが自動的に作成されます。ユーザーは、ロールを作成して、それをルール・セットに関連付けるのみです。ルール定義では、ログインを試行するユーザーが検証されます。
Oracle Database Vaultに作成するセキュア・アプリケーション・ロール上でレポートを実行できます。詳細は、「関連するレポートおよびデータ・ディクショナリ・ビュー」を参照してください。
この章では、Oracle Database Vault Administratorを使用してセキュア・アプリケーション・ロールを構成する方法を説明します。Oracle Database Vaultが提供するPL/SQLインタフェースおよびパッケージを使用してセキュア・アプリケーション・ロールを構成するには、次の章を参照してください。
ログインするユーザーに対してロールを付与または拒否する条件を設定する1つ以上のルールが含まれるルール・セットを作成します。
ルール・セットの基礎となるルールを作成する場合、Oracle Database Vaultではセキュア・アプリケーション・ロールの起動者の権限が自動的に組み込まれます。ルールは、ログインしようとするユーザーを検証します。ルールにユーザーを検証するためのより複雑なコードが必要な場合、PL/SQLハンドラを作成し、それをルール・セットに追加します。ルール・セットの詳細は、第5章「ルール・セットの構成」を参照してください。
Database Vault所有者(DV_OWNER
)ロールが付与されているデータベース・アカウントを使用して、Oracle Database Vault Administratorにログインします。
少なくとも、DV_ADMIN
ロールを持っている必要があります。ログイン方法は、「Oracle Database Vault Administratorの起動」で説明されています。
「管理」ページの「Database Vault機能管理」で、「セキュア・アプリケーション・ロール」をクリックします。
「セキュア・アプリケーション・ロール」ページで、次のようにします。
新しいセキュア・アプリケーション・ロールを作成するには、「作成」をクリックします。
既存のセキュア・アプリケーション・ロールを編集するには、リストからセキュア・アプリケーション・ロールを選択して「編集」をクリックします。
既存のセキュア・アプリケーション・ロールを変更できるのは、それがOracle Database Vaultで作成された場合のみです。Oracle Database Vault以外を使用して作成されたセキュア・アプリケーション・ロールやデータベース・ロールは変更できません。既存のOracle Databaseロールを変更してOracle Database Vaultで使用できるようにする場合は、Oracle Database Vaultで新しいセキュア・アプリケーション・ロールを作成し、既存のロールにそのセキュア・アプリケーション・ロールを付与します。たとえば、SQL*Plusでは次のようにします。
GRANT myExistingDBrole TO myDVrole;
新しいセキュア・アプリケーション・ロールを作成したら、この新しいロールを使用するようコードを変更する必要があります。これを実行するには、アプリケーション・コードにDVSYS.DBMS_MACSEC_ROLES.SET_ROLE
を使用します。SET_ROLE
ファンクションの詳細は、「SET_ROLEプロシージャ」を参照してください。
「ロールの作成」(または「ロールの編集」)ページで、次の設定を入力して「OK」をクリックします。
一般
次の設定を入力します。
ロール: 空白は使用せず、30文字以内の名前を入力します。必須ではありませんが、ロール名は大文字で入力することをお薦めします。この名前が、『Oracle Database SQL言語リファレンス』で説明されている、CREATE ROLE
文を使用したロール作成の標準のOracleネーミング規則に準拠していることを確認してください。この属性は必須です。
ステータス: 「有効」または「無効」のいずれかを選択し、実行時にセキュア・アプリケーション・ロールを有効または無効にします。デフォルトは「有効」です。この属性は必須です。
有効: DVSYS.DBMS_MACSEC_ROLES.SET_ROLE
ファンクションを呼び出し、データベース・セッションにロールが設定されているかどうかを特定します。
このファンクションの詳細は、「SET_ROLEプロシージャ」を参照してください。
DVSYS.DBMS_MACSEC_ROLES.SET_ROLE
ファンクションの詳細は、「Oracle Database VaultのPL/SQLパッケージ」を参照してください。
ルール・セット
リストから、セキュア・アプリケーション・ロールに関連付けるルール・セットを選択します。この属性は必須です。
DVSYS.DBMS_MACSEC_ROLES.SET_ROLE
を呼び出す際に、ルール・セットがTrueと評価されると、Oracle Database Vaultによりデータベース・セッションにそのロールが設定されます。ルール・セットがFalseと評価されると、ロールは設定されません。
ルール・セットの詳細は、第5章「ルール・セットの構成」を参照してください。
データベース管理権限を持っているユーザーはDROP ROLE
SQL文を使用して、Oracle Database Vaultを使用して作成されたセキュア・アプリケーション・ロールを削除できます。
データベース管理者によりセキュア・アプリケーション・ロールが削除されないよう、セキュア・アプリケーション・ロールを作成する際にはレルムを使用して保護します。これを実行するには、レルム認可にロールを追加します。詳細は、「レルム認可の定義」を参照してください。
セキュア・アプリケーション・ロールを削除する前に、そのロールに関連するOracle Database Vaultビューに問い合せることで、そのセキュア・アプリケーション・ロールへの様々な参照を特定できます。詳細は、「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
セキュア・アプリケーション・ロールを削除するには、次のようにします。
削除するセキュア・アプリケーション・ロールを使用している可能性のあるアプリケーションを確認して変更します。
Oracle Database Vaultの「管理」ページで、「セキュア・アプリケーション・ロール」を選択します。
「セキュア・アプリケーション・ロール」ページで、削除するロールを選択します。
「削除」をクリックします。
「確認」ページで「はい」をクリックします。
Oracle Database Vaultによって管理されているセキュア・アプリケーション・ロールの処理フローは、次のとおりです。
Oracle Database Vault Administrator、またはDVSYS.DBMS_MACADM
パッケージのセキュア・アプリケーション・ロール固有のファンクションを使用してロールを作成または更新します。
詳細は、「DVSYS.DBMS_MACADMのセキュア・アプリケーション・ロール・プロシージャ」を参照してください。
DVSYS.DBMS_MACSEC_ROLES.SET_ROLE
ファンクションを使用して、そのロールを呼び出すようにアプリケーションを変更します。
詳細は、「SET_ROLEプロシージャ」を参照してください。
Oracle Database Vaultにより、セキュア・アプリケーション・ロールに関連付けられているルール・セットが評価されます。
ルール・セットがTrueと評価されると、ロールが現行のセッションに対して有効になります。ルール・セットがFalseと評価されると、ロールは有効になりません。どちらの場合も、Oracle Database Vaultにより、セキュア・アプリケーション・ロールに関連付けられているルール・セットの関連する監査およびカスタム・イベント・ハンドラが処理されます。
このチュートリアルでは、OE
スキーマのORDERS
表に対するSELECT
SQL文を特定のユーザーに制限します。さらに、これらのユーザーは、リモート接続からではなく、オフィス内でのみOE.ORDERS
表に対してこれらの文を実行できます。これを実行するには、Oracle Database Vaultセキュア・アプリケーション・ロールを作成し、これに関連付けたルール・セットによって実施されるチェックに合格した場合のみ、ユーザーにこのロールが付与されるようにします。
このチュートリアルの内容は次のとおりです。
Oracle Database Vaultアカウント・マネージャとしてSQL*Plusにログインします。
たとえば、次のようになります。
sqlplus dbvacctmgr Enter password: password
次のユーザー・アカウントを作成します。
CREATE USER eabel IDENTIFIED BY password; CREATE USER ahutton IDENTIFIED BY password; CREATE USER ldoran IDENTIFIED BY password;
SYSDBA
権限を使用して、SYS
として接続し、これらのユーザーにCREATE SESSION
権限を付与します。
CONNECT SYS/AS SYSDBA Enter password: password GRANT CREATE SESSION TO eabel, ahutton, ldoran;
Oracle Database Vaultアカウント・マネージャとしてSQL*Plusに接続します。
たとえば、次のようになります。
CONNECT dbvacctmgr
Enter password: password
OE
アカウントのアカウント・ステータスを確認します。
SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'OE';
OE
アカウントがロックされて無効になっている場合、ロックを解除し、新しいパスワードを割り当てます。
ALTER USER OE ACCOUNT UNLOCK IDENTIFIED BY password;
Database Vault所有者(DV_OWNER
)ロールが付与されているデータベース・アカウントを使用して、Oracle Database Vault Administratorにログインします。
ログイン方法は、「Oracle Database Vault Administratorの起動」で説明されています。
「管理」ページで、「ルール・セット」を選択します。
「ルール・セット」ページが表示されます。
「作成」をクリックします。
「ルール・セットの作成」ページが表示されます。
次の情報を入力します。
名前: Can Modify Orders
説明: Rule set to control who can modify orders in the OE.ORDERS table
残りの設定はデフォルトのままにして、「OK」をクリックします。
「ルール・セット」ページで、Can Modify Ordersルール・セットを選択し、「編集」をクリックします。
「ルール・セットの編集: Can Modify Orders」ページが表示されます。
ページの最下部までスクロールし、「ルール・セットに関連付けられたルール」で「作成」をクリックします。
次の2つのルール・セットを作成します。
ルール名 | ルール式 | |
Check IP Address |
DVF.F$CLIENT_IP = '192.0.2.12' |
|
Check Session User |
DVF.F$SESSION_USER IN ('EABEL', 'AHUTTON') |
Check IP Addressルールでは、123.45.67.89を自身のコンピュータのIPアドレスに置き換えます。実際には、アクセスを許可されるユーザーのすべてのIPアドレスを含む式を作成します。
これらのルールのどちらでも、デフォルト・ファクタClient_IPおよびSession_Userを使用します。これらのファクタの詳細は、「デフォルトのファクタ」を参照してください。これらのファクタが削除または変更されている場合、かわりに次のルール式を使用できます。
Check IP Address: UPPER(SYS_CONTEXT('USERENV','IP_ADDRESS')) = '192.0.2.12'
Check Session User: UPPER(SYS_CONTEXT('USERENV','SESSION_USER')) IN ('EABEL', 'AHUTTON')
Can Modify Orders表の「ステータス」設定が「有効」に、「評価オプション」が「すべてTrue」に設定されていることを確認します。
「OK」をクリックします。
Oracle Database Vaultで、「管理」ページに戻ります。
「管理」で「セキュア・アプリケーション・ロール」を選択します。
「セキュア・アプリケーション・ロール」ページが表示されます。
「作成」をクリックします。
「ロールの作成」ページが表示されます。
「ロール」ボックスで、ORDERS_MGMT
と入力し、ロールに名前を付けます。
「ルール・セット」で、「Can Modify Orders」を選択します。
「OK」をクリックします。
この段階で、Database Vaultセキュア・アプリケーション・ロールとそれに関連付けられたルール・セットが作成されますが、ロールにはまだ権限がありません。起動者の権限を使用してロールを作成する必要はありません。セキュア・アプリケーション・ロールの作成時に、Oracle Database Vaultにより自動的にロールが含まれます。
ユーザーOE
としてSQL*Plusに接続します。
CONNECT OE
Enter password: password
ORDERS_MGMT
Database Vaultセキュア・アプリケーション・ロールにSELECT
権限を付与します。
GRANT SELECT ON ORDERS TO ORDERS_MGMT;
SQL*Plusで、ユーザーeabel
としてデータベースに直接接続します。
CONNECT eabel@orcl
Enter password: password
orcl
を使用するデータベース・インスタンスの名前に置き換えます。
ORDERS_MGMT
ロールを設定します。
EXEC DVSYS.DBMS_MACSEC_ROLES.SET_ROLE('ORDERS_MGMT');
通常、このコールはユーザーがログインするアプリケーションに埋め込みます。
OE.ORDERS
表から選択します。
SELECT COUNT(*) FROM OE.ORDERS;
次のような出力結果が表示されます。
COUNT(*) ---------- 105
ユーザーeabel
は、正しいIPアドレスからデータベースに直接ログインし、有効セクション・ユーザーとしてリストにあるため、OE.ORDERS
表から選択できます。ユーザーahutton
が同様にSQL*Plusにログインした場合も、OE.ORDERS
表から選択できます。
データベース・インスタンスを指定せずに、ユーザーeabel
として再接続し、再びOE.ORDERS
表からの選択を試行します。
CONNECT eabel
Enter password: password
EXEC DVSYS.DBMS_MACSEC_ROLES.SET_ROLE('ORDERS_MGMT');
次のような出力結果が表示されます。
Error at line 1: ORA-47305: Rule Set Violation on SET ROLE (Can Modfiy Orders) ...
続いて次のように入力します。
SELECT COUNT(*) FROM OE.ORDERS;
次のような出力結果が表示されます。
ERROR at line 1: ORA-00942: table or view does not exist
ユーザーeabel
は、有効なユーザーであっても、ルール・セットのCheck IP Addressルールに違反しているため、ORDERS_MGMT
ロールを付与されません。IPアドレスが認識される唯一の方法は、ユーザーeabel
が手順1で行ったように、データベース・インスタンスを指定して接続することです。(これがどのように機能するかは、第7章の「手順3: Domainファクタ・アイデンティティのClient_IPファクタへのマップ」、手順7を参照してください。)
ユーザーldoran
として接続し、次の文を入力します。
EXEC DVSYS.DBMS_MACSEC_ROLES.SET_ROLE('ORDERS_MGMT'); SELECT COUNT(*) FROM OE.ORDERS;
ユーザーldoran
は有効なユーザーではないので、ORDERS_MGMT
ロールを付与されません。したがって、OE.ORDERS
表から選択できません。
Database Vault所有者としてSQL*Plusにログインします。
たとえば、次のようになります。
CONNECT dbvowner
Enter password: password
ORDERS_MGMT
セキュア・アプリケーション・ロールを削除します。
EXEC DVSYS.DBMS_MACADM.DELETE_ROLE('ORDERS_MGMT');
Can Modify Ordersルール・セットを削除するために、次のコマンドを示した順序で入力します。
EXEC DVSYS.DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('Can Modify Orders', 'Check IP Address'); EXEC DVSYS.DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('Can Modify Orders', 'Check Session User'); EXEC DVSYS.DBMS_MACADM.DELETE_RULE('Check IP Address'); EXEC DVSYS.DBMS_MACADM.DELETE_RULE('Check Session User'); EXEC DVSYS.DBMS_MACADM.DELETE_RULE_SET('Can Modify Orders'); COMMIT;
Database Vaultアカウント・マネージャとして接続し、ユーザーを削除します。
たとえば、次のようになります。
CONNECT dbvacctmgr
Enter password: password
DROP USER eabel;
DROP USER ahutton;
DROP USER ldoran;
必要がなければ、OE
ユーザー・アカウントをロックし、無効にします。
ALTER USER OE ACCOUNT LOCK PASSWORD EXPIRE;
Oracle Enterprise Manager(デフォルトでOracle DatabaseとともにインストールされるOracle Enterprise Manager Database Controlを含む)、Statspack
およびTKPROF
などのツールを実行してシステム・パフォーマンスを確認できます。Oracle Enterprise Managerの詳細は、Oracle Enterprise Managerのドキュメント・セットを参照してください。Database Controlの詳細は、オンライン・ヘルプを参照してください。Statspack
およびTKPROF
ユーティリティについては、『Oracle Databaseパフォーマンス・チューニング・ガイド』で説明されています。
表8-1に、Oracle Database Vaultセキュア・アプリケーション・ロールの分析に便利なOracle Database Vaultレポートを示します。これらのレポートの実行方法の詳細は、第16章「Oracle Database Vaultレポート」を参照してください。
表8-1 セキュア・アプリケーション・ロールに関連するレポート
DBA_DV_ROLE
データ・ディクショナリ・ビューを使用すれば、権限管理で使用されるOracle Database Vaultセキュア・アプリケーション・ロールを検索できます。詳細は、「DBA_DV_ROLEビュー」を参照してください。