この章の内容は次のとおりです。
コマンド・ルールは、1つ以上のデータベース・オブジェクトに影響を与えるSELECT
、ALTER SYSTEM
、データベース定義言語(DDL)およびデータ操作言語(DML)文を保護するために作成するルールです。コマンド・ルールをカスタマイズして実行するには、1つ以上のルールの集合であるルール・セットにコマンド・ルールを関連付けます。コマンド・ルールは実行時に実行されます。コマンド・ルールは、オブジェクトが存在するレルムに関係なく、コマンド・ルールによって保護されるSQL文の使用を試みる全員に影響します。レルム固有のオブジェクトを保護する場合は、「レルム認可の定義」を参照してください。
コマンド・ルールには、それぞれの結合操作と認可機能に加えて、次の属性があります。
コマンド・ルールで保護されるSQL文
コマンド・ルールが影響するオブジェクトの所有者
コマンド・ルールが影響するデータベース・オブジェクト
コマンド・ルールが有効かどうか
関連付けられているルール・セット
SQL文および操作の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。また、「コマンド・ルールで保護できるSQL文」も参照してください。
コマンド・ルールは、次のように分類できます。
範囲がシステム全体に及ぶコマンド・ルール。このタイプでは、データベース・インスタンスごとに1つのコマンド・ルールのみを作成できます。例として、ALTER SYSTEM
およびCONNECT
文のコマンド・ルールがあげられます。
スキーマ固有のコマンド・ルール。 DROP TABLE
文のコマンド・ルールの作成は、この一例です。
オブジェクト固有のコマンド・ルール。コマンド・ルール定義に含まれる特定の表を使用してDROP TABLE
文を作成することは、この一例です。
コマンド・ルールの影響を受ける文をユーザーが実行すると、Oracle Database Vaultによって最初にレルム認可がチェックされます。レルム違反が検出されず、関連付けられているコマンド・ルールが有効な場合は、関連付けられているルール・セットがDatabase Vaultによって評価されます。すべてのルール・セットの評価がTrueの場合、その文は認可されてさらに処理されます。評価がFalseのルール・セットがある場合、その文は認可されずコマンド・ルール違反が作成されます。ルール・セットの詳細は、第5章「ルール・セットの構成」で説明しています。
通常の認可プロセス、Oracle Label Securityの初期化、ファクタの初期化およびOracle Label Securityの統合が完了した後に、セッションが許可されているかどうかを確認できるCONNECT
イベントにコマンド・ルールを定義することもできます。また、必要な場合にはコマンド・ルールを無効または有効にし、同じルールをレルムやコマンド・ルールに適用できます。
たとえば、BIZAPP
スキーマ内で、CREATE TABLE
、DROP TABLE
およびALTER TABLE
などのDDL文が営業時間後に認可されるのは許可するが、営業時間中には許可しないというコマンド・ルールを構成できます。
Oracle Database Vaultに作成するコマンド・ルール上でレポートを実行できます。詳細は、「関連するレポートおよびデータ・ディクショナリ・ビュー」を参照してください。
この章では、Oracle Database Vault Administratorを使用してコマンド・ルールを構成する方法を説明します。Oracle Database Vaultが提供するPL/SQLインタフェースおよびパッケージを使用してコマンド・ルールを構成するには、次の章を参照してください。
表6-1に、Oracle Database Vaultが提供するデフォルトのコマンド・ルールを示します。
表6-1 デフォルトのコマンド・ルール
SQL文 | オブジェクト名 | ルール・セット名 |
---|---|---|
|
- |
アカウント/プロファイルを保守可能 |
|
- |
システム・パラメータを許可 |
|
- |
自分のアカウントを保守可能 |
|
- |
アカウント/プロファイルを保守可能 |
|
- |
アカウント/プロファイルを保守可能 |
|
- |
アカウント/プロファイルを保守可能 |
|
- |
アカウント/プロファイルを保守可能 |
|
|
VPD管理権限を付与可能 |
|
|
VPD管理権限を付与可能 |
次に示す一連のコマンド・ルールは、ユーザー管理の職務分離の実現をサポートします。
ALTER PROFILE
ALTER USER
CREATE PROFILE
CREATE USER
DROP PROFILE
DROP USER
ユーザーにこれらのコマンドの使用権限を付与するには、ルール・セットによってチェックされるロールをユーザーに付与します。たとえば、CREATE USER
コマンド・ルールは、CREATE USER
文を実行しようとするユーザーにDV_ACCTMGR
ロールが付与されていることを確認します。
次に示すOracle Virtual Private Database(VPD)のデフォルトのコマンド・ルールは、データベース管理者によるアカウントへのVPD機能の付与を阻止します。
GRANT
REVOKE
DV_OWNER
ロールのあるアカウントのみ、SYS.DBMS_RLS
オブジェクトやEXECUTE
権限に関連するGRANT
およびREVOKE
文を使用できます。
コマンド・ルールを使用して、次のSQL文を保護できます。
ALTER CLUSTER |
CREATE CONTEXT |
DROP FUNCTION |
ALTER DIMENSION |
CREATE DATABASE LINK |
DROP INDEX |
ALTER FUNCTION |
CREATE DIMENSION |
DROP INDEXTYPE |
ALTER INDEX |
CREATE DIRECTORY |
DROP JAVA |
ALTER INDEXTYPE |
CREATE FUNCTION |
DROP LIBRARY |
ALTER JAVA |
CREATE INDEX |
DROP OPERATOR |
ALTER OPERATOR |
CREATE INDEXTYPE |
DROP OUTLINE |
ALTER OUTLINE |
CREATE JAVA |
DROP PACKAGE |
ALTER PACKAGE |
CREATE LIBRARY |
DROP PACKAGE BODY |
ALTER PACKAGE BODY |
CREATE OPERATOR |
DROP PROCEDURE |
ALTER PROCEDURE |
CREATE OUTLINE |
DROP PROFILE |
ALTER PROFILE |
CREATE PACKAGE |
DROP ROLE |
ALTER RESOURCE COST |
CREATE PACKAGE BODY |
DROP ROLLBACK SEGMENT |
ALTER ROLE |
CREATE PROCEDURE |
DROP SEQUENCE |
ALTER ROLLBACK SEGMENT |
CREATE PROFILE |
DROP SNAPSHOT |
ALTER SEQUENCE |
CREATE ROLE |
DROP SNAPSHOT LOG |
ALTER SNAPSHOT |
CREATE ROLLBACK SEGMENT |
DROP SYNONYM |
ALTER SNAPSHOT LOG |
CREATE SCHEMA |
DROP TABLE |
ALTER SYNONYM |
CREATE SEQUENCE |
DROP TABLESPACE |
ALTER SYSTEM |
CREATE SNAPSHOT |
DROP TRIGGER |
ALTER TABLE |
CREATE SNAPSHOT LOG |
DROP TYPE |
ALTER TABLESPACE |
CREATE SYNONYM |
DROP TYPE BODY |
ALTER TRIGGER |
CREATE TABLE |
DROP USER |
ALTER TYPE |
CREATE TABLESPACE |
DROP VIEW |
ALTER TYPE BODY |
CREATE TRIGGER |
EXECUTE |
ALTER USER |
CREATE TYPE |
GRANT |
ALTER VIEW |
CREATE TYPE BODY |
INSERT |
ANALYZE CLUSTER |
CREATE USER |
NOAUDIT |
ANALYZE INDEX |
CREATE VIEW |
RENAME |
ANALYZE TABLE |
DELETE |
REVOKE |
ASSOCIATE STATISTICS |
DISASSOCIATE STATISTICS |
SELECT |
AUDIT |
DROP CLUSTER |
TRUNCATE CLUSTER |
COMMENT |
DROP CONTEXT |
TRUNCATE TABLE |
COMMIT |
DROP DATABASE LINK |
UPDATE |
CONNECT |
DROP DIMENSION |
|
CREATE CLUSTER |
DROP DIRECTORY |
Database Vault所有者(DV_OWNER
)ロールが付与されているデータベース・アカウントを使用して、Oracle Database Vault Administratorにログインします。
少なくとも、DV_ADMIN
ロールを持っている必要があります。ログイン方法は、「Oracle Database Vault Administratorの起動」で説明されています。
「管理」ページの「Database Vault機能管理」で、「コマンド・ルール」をクリックします。
「コマンド・ルール」ページで次のようにします。
新しいコマンド・ルールを作成するには、「作成」をクリックします。
既存のコマンド・ルールを編集するには、リストからコマンド・ルールを選択して「編集」をクリックします。
「コマンド・ルールの作成」(または「コマンド・ルールの編集」)ページで、次の設定を入力して「OK」をクリックします。
一般
次の設定を入力します。
コマンド: コマンド・ルールを作成するSQL文または操作を選択します。この属性は必須です。
ステータス: 「有効」または「無効」のいずれかを選択し、実行時にコマンド・ルールを有効または無効にします。デフォルトは「有効」です。この属性は必須です。
適用性
次の設定を入力します。
オブジェクト所有者: リストから、コマンド・ルールが影響するオブジェクトの所有者を選択します。%のようなワイルドカード文字を使用できます。(ただし、ワイルドカード文字をテキストと一緒に使用することはできません。たとえば、EM%
を使用して、名前がEM
で始まるすべての所有者を選択することはできません。)この属性は、特定のスキーマ内のオブジェクトに提供するすべてのSQL文で必須です。サポートされているSQL文のリストは、「コマンド・ルールで保護できるSQL文」を参照してください。
SELECT
、INSERT
、UPDATE
、DELETE
およびEXECUTE
文は、すべての選択(%)、またはSYS
およびDVSYS
スキーマには使用できないことに注意してください。
オブジェクト名: コマンド・ルールが影響するデータベース・オブジェクトの名前を入力するか、%を指定してすべてのデータベース・オブジェクトを選択します。ただし、ワイルドカード文字をテキストと一緒に使用することはできません。たとえば、EMP_%
と入力して、文字EMP_
で始まるすべての表を指定することはできません。「オブジェクト所有者」リストからオブジェクト所有者を選択した場合、この属性は必須です。
コマンド・ルールが影響するオブジェクト上でOracle Database Vaultレポートを実行できます。詳細は、「関連するレポートおよびデータ・ディクショナリ・ビュー」を参照してください。
ルール・セット
リストから、コマンド・ルールに関連付けるルール・セットを選択します。この属性は必須です。
ルール・セットの評価がTrueの場合、そのSQL文は成功します。評価がFalseの場合、そのSQL文は失敗し、Oracle Database Vaultによってコマンド・ルール違反が作成されます。(第16章で説明されている「コマンド・ルール構成の問題」レポートを使用して、そのようなルール違反を追跡できます。)ルール・セットに関連付けられている監査およびカスタム・イベント処理は、コマンド・ルール処理の一部として発生します。
ルール・セットの詳細は、第5章「ルール・セットの構成」を参照してください。
コマンド・ルールを削除する前に、それに関連するOracle Database Vaultビューに問い合せることで、そのコマンド・ルールへの様々な参照を特定できます。詳細は、「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
Oracle Database Vaultの「管理」ページで、「コマンド・ルール」を選択します。
「コマンド・ルール」ページで、削除するコマンド・ルールを選択します。
「削除」をクリックします。
「確認」ページで「はい」をクリックします。
「レルムの動作」では、データベース・アカウントによりレルム内のオブジェクトに影響するSELECT
、DDLまたはDML文が発行された場合の動作を説明しています。
コマンド・ルールが実行されると、次のアクションが実行されます。
Oracle Database Vaultが、アカウントで使用するすべてのルールを問い合せます。
SELECT
、DDLおよびDML文では、オブジェクト所有者およびオブジェクト名でワイルドカード表記を使用できるため、複数のコマンド・ルールが適用される場合があります。
ルール・セットは、コマンド・ルールおよびレルム認可の両方に関連付けることができます。Oracle Database Vaultにより、まずレルム認可ルール・セットが評価され、評価されるコマンド・タイプに適用するルール・セットが次に評価されます。
適用する各コマンド・ルールに関して、Oracle Database Vaultはそれに関連付けられているルール・セットを評価します。
適用可能なコマンド・ルールに関連付けられているルール・セットが1つでもFalseまたはエラーで返されると、Oracle Database Vaultによりそのコマンドの実行が阻止されます。それ以外の場合、コマンドは認可されてさらに処理されます。監査およびイベント・ハンドラに関するルール・セットの構成により、発生する監査またはカスタム処理が決定されます。
コマンド・ルールはオブジェクト権限より優先されます。コマンドまたはコマンドのルール・セットを無効(あるいはこれらに「無効」を設定)にできます。コマンドを無効にした場合、それに関連付けられているルール・セットに関係なく、コマンドは実行できません。つまり、コマンド自体が無効になります。ただし、コマンドのルール・セットを無効にした場合、ルール・セットはチェックされません。この場合、コマンドは無条件で実行を許可されます。コマンドが「無効」に設定されていると、表に対するSELECT
権限を持っていても、そのユーザーは表の問合せを実行できません。(コマンド自体ではなく、ルール・セットのみが無効になっている場合。)
このチュートリアルでは、ユーザーSCOTT
の表作成権限を無効にし、その後有効にする簡単なコマンド・ルールを作成します。
このチュートリアルの内容は次のとおりです。
関連項目: 違反発生時に電子メール・アラートを送信するために、どのようにコマンド・ルールとルール・セットが連携して機能するかを示す別の例は、「チュートリアル: セキュリティ違反の電子メール・アラートの作成」を参照してください。 |
ユーザーSCOTT
としてSQL*Plusにログインします。
sqlplus SCOTT
Enter password: password
SCOTT
アカウントがロックされて無効になっている場合、Database Vaultアカウント・マネージャとしてログインし、SCOTT
のロックを解除し、新しいパスワードを作成します。たとえば、次のようになります。
sqlplus dbvacctmgr Enter password: password ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY password;
password
をセキュアなパスワードに置き換えます。パスワードを作成するための最小限の要件は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
CONNECT SCOTT
Enter password: password
ユーザーSCOTT
として、表を作成します。
CREATE TABLE t1 (num NUMBER);
表を削除します。
DROP TABLE t1;
この段階で、ユーザーSCOTT
は、表の作成および削除を行うことができます。SQL*Plusを終了せずに、SCOTT
として接続したままにします。後でSCOTT
が別の表を作成しようとするときに使用します。
Database Vault所有者(DV_OWNER
)ロールが付与されているデータベース・アカウントを使用して、Oracle Database Vault Administratorにログインします。
ログイン方法は、「Oracle Database Vault Administratorの起動」で説明されています。
Oracle Database Vault Administratorの「管理」ページで、「コマンド・ルール」をクリックします。
「コマンド・ルール」ページが表示されます。
「作成」をクリックします。
「コマンド・ルールの作成」ページが表示されます。
次の設定を入力します。
「コマンド」リスト: 「CREATE TABLE」を選択します。
ステータス: 「有効」に設定して、コマンド・ルールをアクティブにします。
オブジェクト所有者: 「SCOTT」を選択します。
オブジェクト名: %に設定して、SCOTT
スキーマ内のすべてのオブジェクトに適用します。
ルール・セット: 「無効」を選択して、ユーザーSCOTT
が表を作成できないようにします。
「OK」をクリックします。
Database Vault Administratorを終了しないでください。
コマンド・ルールは即時有効になります。ユーザーSCOTT
は、CREATE TABLEコマンド・ルールを作成する前の、先ほどまでいたユーザー・セッションにまだいるとしても、ただちに表を作成できなくなります。
SQL*Plusで、ユーザーSCOTT
としてログインしていることを確認します。
CONNECT SCOTT
Enter password: password
表を作成してみます。
CREATE TABLE t1 (num NUMBER);
次のような出力結果が表示されます。
ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-47400: Command Rule violation for create table on SCOTT.T1 ORA-06512: at "DVSYS.AUTHORIZE_EVENT", line 55 ORA-06512: at line 31
この例からわかるように、SCOTT
は、自身のスキーマ内でも、表を作成できなくなります。
Oracle Database Vault Administratorで、次の作業を実行します。
「コマンド・ルール」ページで、「CREATE TABLE」コマンド・ルールを選択して、「編集」をクリックします。
「コマンド・ルールの編集」ページで、「ルール・セット」リストから「有効」を選択します。
「OK」をクリックします。
SQL*Plusで、ユーザーSCOTT
として、表の作成を再試行します。
CREATE TABLE t1 (num NUMBER); Table created.
CREATE TABLEコマンド・ルールが「有効」に設定されたので、ユーザーSCOTT
は、再び表の作成が許可されるようになりました。(SQL*Plusを終了しないでください。)
Oracle Database Vault Administratorで、CREATE TABLEコマンド・ルールを次のように削除します。
「コマンド・ルール」ページに戻ります。
「CREATE TABLE」コマンド・ルールを選択して、「削除」をクリックします。
「確認」ページで「はい」をクリックします。
ユーザーSCOTT
としてSQL*Plusにログインし、t1
表を削除します。
SQL> DROP TABLE t1;
SCOTT
アカウントが使用可能である必要がなくなった場合、Database Vaultアカウント・マネージャとして接続し、次のALTER USER
文を入力します。
CONNECT dbvacctmgr
Enter password: password
ALTER USER SCOTT ACCOUNT LOCK PASSWORD EXPIRE;
次に示すコマンド・ルール構成のガイドラインに従ってください。
維持が簡単であるため、ファイングレイン・コマンド・ルールを作成します。
たとえば、特定のスキーマでSELECT
文が発生しないようにする場合は、すべての状況でSELECT
文を阻止する一般的なコマンド・ルールを作成するのではなく、特定のスキーマでSELECT
文を阻止するようにコマンド・ルールを設計します。
CONNECT
イベントに関するルールを設計する場合は、不用意にOracle Database Vault所有者または管理者をロックアウトするロジックを含めないよう注意してください。
アカウントがロックアウトされている場合は、Oracle Database Vaultを無効にして、ロックアウトの問題の原因となっているルールを修正し、再びOracle Database Vaultを有効にします。Oracle Database Vaultが無効な場合でも、Database Vault AdministratorとDatabase Vault PL/SQLパッケージはまだ使用できます。Database Vaultの無効化および再有効化の手順は、付録B「Oracle Database Vaultの有効化および無効化」を参照してください。
管理タスクに対しては、有効なコマンド・ルールの一時的な緩和が必要な場合もあります。コマンド・ルールを無効にするのではなく、セキュリティ管理者(DV_ADMIN
またはDV_OWNER
ロールのあるアカウント)をログインさせて、ルール・セットを「有効」に設定します。Enabledという名前のデフォルト・ルール・セットの「成功時または失敗時に監査」をオンにし、タスクの完了時にコマンド・ルールを元のルール・セットの設定に戻します。
コマンド・ルールの設計時には、処理が不用意に無効にされる可能性があるため、バックアップなどの自動プロセスを考慮するようにしてください。使用中のプログラム、使用中のアカウントまたはクライアント・プログラムが稼働中のコンピュータやネットワークなど、一連のOracle Database VaultファクタがTrueであることが明白な場合には、コマンドを許可するルールを作成することでこれらのタスクを把握できます。
コマンド・ルールのパフォーマンスは、そのコマンド・ルールに関連付けられているルール・セット内のルールの複雑さに依存します。たとえば、実行に5秒かかるPL/SQLファンクションを起動するルール・セットがあるとします。この場合、このルール・セットを使用するコマンド・ルールでは、実行するコマンド文へのアクセス権の付与に5秒かかります。
Oracle Enterprise Manager(デフォルトでOracle DatabaseとともにインストールされるOracle Enterprise Manager Database Controlを含む)、Statspack
およびTKPROF
などのツールを実行してシステム・パフォーマンスを確認できます。Oracle Enterprise Managerの詳細は、Oracle Enterprise Managerのドキュメント・セットを参照してください。Database Controlの詳細は、オンライン・ヘルプを参照してください。Statspack
およびTKPROF
ユーティリティについては、『Oracle Databaseパフォーマンス・チューニング・ガイド』で説明されています。
表6-2に、コマンド・ルールの分析に便利なOracle Database Vaultレポートを示します。これらのレポートの実行方法の詳細は、第16章「Oracle Database Vaultレポート」を参照してください。
表6-2 コマンド・ルールに関連するレポート
レポート | 説明 |
---|---|
|
コマンド・ルールを処理する操作により生成された監査レコードが表示されます。 |
|
コマンド・ルールに存在するその他の構成問題に加え、ルール違反が追跡されます。 |
|
コマンド・ルールが影響するオブジェクト権限が表示されます。 |
|
コマンド・ルールが影響するオブジェクトが表示されます。 |
|
ルールが定義されていないか、有効ではなく、それらを使用するコマンド・ルールに影響を与える可能性があるルール・セットが表示されます。 |
DBA_DV_COMMAND_RULE
データ・ディクショナリ・ビューを使用すると、コマンド・ルールにより保護されているSQL文を検出できます。詳細は、「DBA_DV_COMMAND_RULEビュー」を参照してください。