この章の内容は次のとおりです。
Oracle Database Vaultでは、Oracle Database Vaultルール・セットで有効にするセキュア・アプリケーション・ロールを作成できます。通常のOracle Databaseセキュア・アプリケーション・ロールはカスタムPL/SQLプロシージャによって有効になります。セキュア・アプリケーション・ロールは、ユーザーによるアプリケーション外からのデータへのアクセスを阻止します。これにより、ユーザーはロールに付与されているアプリケーション権限のフレームワーク内での作業を強制されます。
ルール・セットを基準にしてロールのデータベース・アクセスを行う利点は、データベース・セキュリティ・ポリシーをすべてのアプリケーションに保存するのではなく、中央の1つの場所に保存できることです。ルール・セットに基づいたロールにより、一貫性と柔軟性を兼ね備えたメソッドを作成し、ロールが提供するセキュリティ・ポリシーを実行できます。この方法では、アプリケーション・ロールのセキュリティ・ポリシーを更新する必要がある場合、1つの場所、つまりルール・セットで行うことができます。さらに、ユーザーがどのようにしてデータベースに接続しても、ルール・セットがロールにバインドされているため、結果は同じです。ユーザーは、ロールを作成して、それをルール・セットに関連付けるのみです。関連付けられているルール・セットでは、ロールの有効化を試行するユーザーが検証されます。
Oracle Database Vaultに作成するセキュア・アプリケーション・ロール上でレポートを実行できます。詳細は、「関連するレポートおよびデータ・ディクショナリ・ビュー」を参照してください。
この章では、Oracle Database Vault Administratorを使用してセキュア・アプリケーション・ロールを構成する方法を説明します。Oracle Database Vaultが提供するPL/SQLインタフェースおよびパッケージを使用してセキュア・アプリケーション・ロールを構成するには、次の章を参照してください。
ユーザーにロールの有効化を許可または禁止する条件を設定する1つ以上のルールが含まれるルール・セットを作成します。
ルール・セットの基礎となるルールを作成する場合、ルールでロールの有効化を試行するユーザーを検証する必要があります。ルールで、ログインを試行するユーザーを検証する必要があります。ルール・セットの詳細は、第5章「ルール・セットの構成」を参照してください。
DV_OWNER
またはDV_ADMIN
ロールを付与されているユーザーとしてOracle Database Vault Administratorにログインします。
ログイン方法は、「Oracle Database Vaultの起動」で説明されています。
「管理」ページの「Database Vault機能管理」で、「セキュア・アプリケーション・ロール」をクリックします。
「セキュア・アプリケーション・ロール」ページで、次のようにします。
新しいセキュア・アプリケーション・ロールを作成するには、「作成」をクリックします。
既存のセキュア・アプリケーション・ロールを編集するには、リストからセキュア・アプリケーション・ロールを選択して「編集」をクリックします。
既存のセキュア・アプリケーション・ロールを変更できるのは、それがOracle Database Vaultで作成された場合のみです。Oracle Database Vault以外を使用して作成されたセキュア・アプリケーション・ロールやデータベース・ロールは変更できません。既存のOracle Databaseロールを変更してOracle Database Vaultで使用できるようにする場合は、Oracle Database Vaultで新しいセキュア・アプリケーション・ロールを作成し、既存のロールにそのセキュア・アプリケーション・ロールを付与します。たとえば、SQL*Plusでは次のようにします。
GRANT myExistingDBrole TO myDVrole;
新しいセキュア・アプリケーション・ロールを作成したら、この新しいロールを使用するようコードを変更する必要があります。これを実行するには、アプリケーション・コードにDBMS_MACSEC_ROLES.SET_ROLE
を使用します。SET_ROLEファンクションの詳細は、「SET_ROLEプロシージャ」
を参照してください。
「ロールの作成」(または「ロールの編集」)ページで、次の設定を入力して「OK」をクリックします。
一般
次の設定を入力します。
ロール: 空白は使用せず、30文字以内の名前を入力します。必須ではありませんが、ロール名は大文字で入力することをお薦めします。この名前が、『Oracle Database SQL言語リファレンス』で説明されている、CREATE ROLE文を使用したロール作成の標準のOracleネーミング規則に準拠していることを確認してください。この属性は必須です。
ステータス: 「有効」または「無効」のいずれかを選択し、実行時にセキュア・アプリケーション・ロールを有効または無効にします。デフォルトは「有効」です。この属性は必須です。
有効: 使用できるようにロールを有効にします。すなわち、ユーザーはDBMS_MACSEC_ROLES.SET_ROLE
ファンクションを呼び出してロールの有効化を試行できます。ロールを有効化できるかどうかは、関連付けられているルール・セットの評価結果によって決まります。
このファンクションの詳細は、「SET_ROLEプロシージャ」を参照してください。
無効: 使用できないようにロールを無効にします。DBMS_MACSEC_ROLES.SET_ROLE
ファンクションでロールを有効化できません。
DBMS_MACSEC_ROLES.SET_ROLE
ファンクションの詳細は、「Oracle Database VaultのPL/SQLパッケージ」を参照してください。
ルール・セット
リストから、セキュア・アプリケーション・ロールに関連付けるルール・セットを選択します。この属性は必須です。
DBMS_MACSEC_ROLES.SET_ROLE
を呼び出す際に、ルール・セットがTrueと評価されると、Oracle Database Vaultによりデータベース・セッションにそのロールが設定されます。ルール・セットがFalseと評価されると、ロールは設定されません。
ルール・セットの詳細は、第5章「ルール・セットの構成」を参照してください。
データベース管理権限を持っているユーザーはDROP ROLE
SQL文を使用して、Oracle Database Vaultを使用して作成されたセキュア・アプリケーション・ロールの削除を試行できます。
Oracle Database Vaultセキュア・アプリケーション・ロールが作成されると、Database Vaultによりセキュア・アプリケーション・ロールがDatabase Vaultレルムに追加されます。これにより、データベース管理者によるセキュア・アプリケーション・ロールの削除を防ぐことができます。
セキュア・アプリケーション・ロールを削除する前に、そのロールに関連するOracle Database Vaultビューに問い合せることで、そのセキュア・アプリケーション・ロールへの様々な参照を特定できます。詳細は、第16章「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
セキュア・アプリケーション・ロールを削除するには、次のようにします。
削除するセキュア・アプリケーション・ロールを使用している可能性のあるアプリケーションを確認して変更します。
Oracle Database Vaultの「管理」ページで、「セキュア・アプリケーション・ロール」を選択します。
「セキュア・アプリケーション・ロール」ページで、削除するロールを選択します。
「削除」をクリックします。
「確認」ページで「はい」をクリックします。
Oracle Database Vaultによって管理されているセキュア・アプリケーション・ロールの処理フローは、次のとおりです。
Oracle Database Vault Administrator、またはDBMS_MACADM
パッケージのセキュア・アプリケーション・ロール固有のファンクションを使用してロールを作成または更新します。
詳細は、「DBMS_MACADMのセキュア・アプリケーション・ロール・プロシージャ」を参照してください。
DBMS_MACSEC_ROLES.SET_ROLE
ファンクションを使用して、そのロールを呼び出すようにアプリケーションを変更します。
詳細は、「SET_ROLEプロシージャ」を参照してください。
Oracle Database Vaultにより、セキュア・アプリケーション・ロールに関連付けられているルール・セットが評価されます。
ルール・セットがTrueと評価されると、ロールが現行のセッションに対して有効になります。ルール・セットがFalseと評価されると、ロールは有効になりません。どちらの場合も、Oracle Database Vaultにより、セキュア・アプリケーション・ロールに関連付けられているルール・セットの関連する監査およびカスタム・イベント・ハンドラが処理されます。
この項の内容は次のとおりです。
このチュートリアルでは、OE
スキーマのORDERS
表に対するSELECT
SQL文を特定のユーザーに制限します。さらに、これらのユーザーは、リモート接続からではなく、オフィス内でのみOE.ORDERS
表に対してこれらの文を実行できます。これを実行するには、Oracle Database Vaultセキュア・アプリケーション・ロールを作成し、これに関連付けたルール・セットによって実施されるチェックに合格した場合のみ、ユーザーにこのロールが有効化されるようにします。
DV_ACCTMGR
ロールを付与されているユーザーとしてSQL*Plusにログインします。
次に例を示します。
sqlplus amalcolm_dvacctmgr
Enter password: password
次のユーザー・アカウントを作成します。
CREATE USER eabel IDENTIFIED BY password; CREATE USER ahutton IDENTIFIED BY password; CREATE USER ldoran IDENTIFIED BY password;
password
をセキュアなパスワードに置き換えます。パスワードを作成するための最小限の要件は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
SYSDBA
権限を使用して、SYS
として接続し、これらのユーザーにCREATE SESSION
権限を付与します。
CONNECT SYS AS SYSDBA Enter password: password GRANT CREATE SESSION TO eabel, ahutton, ldoran;
DV_ACCTMGR
ユーザーとしてSQL*Plusに接続します。
次に例を示します。
CONNECT amalcolm_dvacctmgr
Enter password: password
OE
アカウントのアカウント・ステータスを確認します。
SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'OE';
OE
アカウントがロックされて無効になっている場合、ロックを解除し、新しいパスワードを割り当てます。
ALTER USER OE ACCOUNT UNLOCK IDENTIFIED BY password;
DV_OWNER
またはDV_ADMIN
ロールを付与されているユーザーとしてOracle Database Vault Administratorにログインします。
ログイン方法は、「Oracle Database Vaultの起動」で説明されています。
「管理」ページで、「ルール・セット」を選択します。
「ルール・セット」ページが表示されます。
「作成」をクリックします。
「ルール・セットの作成」ページが表示されます。
次の情報を入力します。
名前: 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セキュア・アプリケーション・ロールとそれに関連付けられたルール・セットが作成されますが、ロールにはまだ権限がありません。
ユーザー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 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 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 DBMS_MACSEC_ROLES.SET_ROLE('ORDERS_MGMT'); SELECT COUNT(*) FROM OE.ORDERS;
ユーザーldoran
は有効なユーザーではないので、ORDERS_MGMT
ロールを付与されません。したがって、OE.ORDERS
表から選択できません。
DV_OWNER
またはDV_ADMIN
ユーザーとしてSQL*Plusにログインします。
次に例を示します。
CONNECT lbrown_dvowner
Enter password: password
ORDERS_MGMT
セキュア・アプリケーション・ロールを削除します。
EXEC DBMS_MACADM.DELETE_ROLE('ORDERS_MGMT');
Can Modify Ordersルール・セットを削除するために、次のコマンドを示した順序で入力します。
EXEC DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('Can Modify Orders', 'Check IP Address'); EXEC DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('Can Modify Orders', 'Check Session User'); EXEC DBMS_MACADM.DELETE_RULE('Check IP Address'); EXEC DBMS_MACADM.DELETE_RULE('Check Session User'); EXEC DBMS_MACADM.DELETE_RULE_SET('Can Modify Orders'); COMMIT;
Database Vaultアカウント・マネージャとして接続し、ユーザーを削除します。
次に例を示します。
CONNECT amalcolm_dvacctmgr
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レポートを示します。これらのレポートの実行方法の詳細は、第18章「Oracle Database Vaultレポート」を参照してください。
表8-1 セキュア・アプリケーション・ロールに関連するレポート
DVSYS.DBA_DV_ROLE
データ・ディクショナリ・ビューを使用すれば、権限管理で使用されるOracle Database Vaultセキュア・アプリケーション・ロールを検索できます。詳細は、「DVSYS.DBA_DV_ROLEビュー」を参照してください。