この章の内容は次のとおりです。
ルール・セットは、レルム認可、ファクタ割当て、コマンド・ルールまたはセキュア・アプリケーション・ロールに関連付けられる1つ以上のルールの集合です。ルール・セットは、含まれる各ルールの評価および評価タイプ(「すべてTrue」または「いずれかTrue」)に基づいてTrueまたはFalseに評価されます。ルール・セット内のルールは、TrueまたはFalseと評価されるPL/SQL式です。ルールを作成し、そのルールを複数のルール・セットに追加できます。
ルール・セットを使用して次のアクティビティを実行できます。
レルム認可がアクティブになる条件の定義(レルム認可をさらに制限することが目的)
コマンド・ルールを許可する時期の定義
セキュア・アプリケーション・ロールの有効化
ファクタのアイデンティティを割り当てる時期の定義
ルール・セットを作成すると、レルムの認証、コマンド・ルール、ファクタまたはセキュア・アプリケーション・ロールの構成時に選択できるようになります。
Oracle Database Vaultに作成するルール・セット上でレポートを実行できます。詳細は、「関連するレポートおよびデータ・ディクショナリ・ビュー」を参照してください。
この章では、Oracle Database Vault Administratorを使用してルール・セットを構成する方法を説明します。Oracle Database Vaultが提供するPL/SQLインタフェースおよびパッケージを使用してルール・セットを構成するには、次の章を参照してください。
デフォルトで、Oracle Database Vaultには次に示すルール・セットが用意されています。
セッションを許可: データベースにセッションを作成する権限を制御します。このルール・セットを使用すると、CONNECTコマンド・ルールを使用してデータベース・ログインを制御するためのルールを追加できます。CONNECTコマンド・ルールは、SYSDBA
の使用が必要なプログラムへのSYSDBA
アクセスの制御または制限に便利です。このルール・セットは移入されていません。
システム・パラメータを許可: システム初期化パラメータを設定する権限を制御します。初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
VPD管理権限を付与可能: GRANT
およびREVOKE
文を使用して、Oracle Virtual Private DatabaseのDBMS_RLS
パッケージのGRANT EXECUTE
またはREVOKE EXECUTE
権限を付与する権限を制御します。
アカウント/プロファイルを保守可能: CREATE USER
、DROP USER
、CREATE PROFILE
、ALTER PROFILE
またはDROP PROFILE
文を使用して、ユーザー・アカウントおよびプロファイルを管理するロールを制御します。
自分のアカウントを保守可能: DV_ACCTMGR
ロールのあるアカウントを許可し、ALTER USER
文を使用したユーザー・アカウントおよびプロファイルの管理を可能にします。また、ALTER USER
文を使用した、個々のアカウントによる個人のパスワードの変更を許可します。
無効: レルム、コマンド・ルール、ファクタおよびセキュア・アプリケーション・ロールを迅速に無効にするための簡易ルール・セットです。
通常、ルール・セットを作成するには、まずルール・セットを作成し、次にそのルール・セットを編集して1つ以上のルールに関連付けます。作成したルール・セットに新しいルールを関連付ける、既存のルールを追加する、もしくはそのルール・セットからルールの関連付けを削除することが可能です。
次の項目も参照してください。
ルール・セットの設計に関する注意事項は、「ルール・セット設計のガイドライン」を参照してください。
ルール式で使用できる一連のファンクションの詳細は、「Oracle Database VaultのPL/SQLルール・ファンクション」を参照してください。
データベースのルール・セットの構成を確認する場合は、「「ルール・セット構成の問題」レポート」を参照してください。
ルール・セットを作成するには、次のようにします。
Database Vault所有者(DV_OWNER
)ロールが付与されているデータベース・アカウントを使用して、Oracle Database Vault Administratorにログインします。
少なくとも、DV_ADMIN
ロールを持っている必要があります。ログイン方法は、「Oracle Database Vault Administratorの起動」で説明されています。
「管理」ページの「Database Vault機能管理」で、「ルール・セット」をクリックします。
「ルール・セット」ページで「作成」をクリックします。
「ルール・セットの作成」ページで、次の設定を入力して「OK」をクリックします。
一般
次の設定を入力します。
名前: ルール・セットの名前を入力します。大/小文字混在で最大で90文字まで入力できます。空白を使用できます。この属性は必須です。
名前は名詞から始めて、そのルール・セットが関連付けられるレルムやコマンド・ルールの名前で完了することをお薦めします。たとえば、次のようになります。
Limit SQL*Plus access
説明: ルール・セットの機能の説明を入力します。大/小文字混在で最大で1024文字まで入力できます。この属性はオプションです。
ルール・セットのビジネス要件を説明することができます。たとえば、次のようになります。
Rule to limit access to SQL*Plus
ステータス: 「有効」または「無効」のいずれかを選択し、実行時にルール・セットを有効または無効にします。ルール・セットはデフォルトでは有効です。この属性は必須です。
評価オプション: ルール・セットに複数のルールを割り当てる場合は、次の設定のいずれかを選択します。
すべてTrue(デフォルト): ルール・セット自体がTrueと評価されるために、ルール・セットのルールはすべてTrueと評価される必要があります。
いずれかTrue: ルール・セット自体がTrueと評価されるために、少なくともルール・セットの1つのルールがTrueと評価される必要があります。
監査オプション
ルール・セット用の監査レコードが作成される時期を決定するには、次のオプションから選択します。この属性は必須です。設定は次のとおりです。
監査無効: どのような場合にも監査レコードは作成されません。
失敗時に監査(デフォルト): ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、監査レコードが作成されます。
成功時または失敗時に監査: ルール・セットが評価されるたびに監査レコードが作成されます。
Oracle Database Vaultの監査証跡には、Rule_Set_Name
およびRule_Set_ID
フィールドが含まれます。これらのフィールドは、ルール・セットがレルム認可やコマンド認可と関連付けられている場合や、ルール・セットがある状況下で監査するよう構成されている場合に値が移入されます。
詳細は、付録A「Oracle Database Vaultの監査」を参照してください。監査対象の情報は、表A-1「監査証跡の書式」に示されています。
エラー処理オプション
ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合は、次の設定を入力してデータベース・セッションへのメッセージを制御します。
失敗オプション: 「エラー・メッセージを表示」(デフォルト)または「エラー・メッセージを表示しない」のいずれかを選択します。
「エラー・メッセージを表示しない」を選択してから監査を有効にすると、侵入者の可能性があるユーザーのアクティビティを追跡できるという利点があります。監査レポートにより侵入者のアクティビティがわかります。エラー・メッセージが表示されないため、侵入者は監査が行われていることに気付きません。
失敗コード: -20000〜-20999の範囲の負の数値を入力します。ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、失敗メッセージ(次で作成)付きのエラー・コードが表示されます。この設定を省略すると、Oracle Database Vaultにより次のエラー・コードが表示されます。
ORA-01031: Insufficient privileges
失敗メッセージ: 大/小文字混在で80文字以内のメッセージを入力し、「失敗コード」で指定した失敗コードに関連付けます。ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、エラー・メッセージが表示されます。エラー・メッセージを指定しない場合、Oracle Database Vaultにより通常のエラー・メッセージが表示されます。
カスタム・イベント・ハンドラ・オプション: 次のオプションのいずれかを選択し、カスタム・イベント・ハンドラ・ロジック(次で作成)を実行する時期を決定します。
ハンドラ無効(デフォルト): カスタム・イベント・メソッドは実行されません。
失敗時に実行: ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、カスタム・イベント・メソッドが実行されます。
成功時に実行: ルール・セットがTrueと評価されるとカスタム・イベント・メソッドが実行されます。
カスタム・イベント・メソッドを作成して、標準のOracle Database Vaultルール・セットの監査機能以外の特別な処理を実行できます。たとえば、イベント・ハンドラを使用して、ワークフロー・プロセスの開始や外部システムへのイベント情報の送信を実行できます。
カスタム・イベント・ハンドラ・ロジック: 大/小文字混在で255文字以内のPL/SQL式を入力します。式には、任意のパッケージ・プロシージャまたはスタンドアロン・プロシージャを含めることができます。独自の式を作成するか、第14章「Oracle Database VaultPL/SQLインタフェースの使用方法」で説明されているPL/SQLインタフェースを使用できます。
完全修飾プロシージャとして式を記述します(schema
.procedure_name
など)。完全なSQL文は含めないでください。アプリケーション・パッケージ・プロシージャまたはスタンドアロン・プロシージャを使用している場合は、オブジェクトに対するGRANT EXECUTE
権限を持つDVSYSを指定する必要があります。プロシージャ・シグネチャは、次の2つの書式のいずれかになります。
PROCEDURE
my_ruleset_handler(
p_ruleset_name
IN VARCHAR2,
p_ruleset_rules
IN BOOLEAN)
: ハンドラ処理にルール・セットの名前およびその戻り値が必要な場合に、この書式を使用します。
PROCEDURE
my_ruleset_handler
: ハンドラ処理にルール・セットの名前と戻り値が不要な場合に、この書式を使用します。
これらの2つの書式のいずれかを使用するユーザー・インタフェースで式を定義する場合は、式を次の書式にします。
myschema.my_ruleset_handler
ルール・セットを作成すると、ルール・セットに追加するルールを作成できます。これを実行するには、新しいルール・セットを編集しルールを定義します。
Oracle Database Vaultの「管理」ページで、「ルール・セット」を選択します。
「ルール・セット」ページで、編集するルール・セットを選択します。
「編集」をクリックします。
必要に応じてルール・セットを変更し、「OK」をクリックします。
関連項目:
|
新しいルール・セットを作成したら、そのルール・セットを1つ以上のルールに関連付けられます。新しいルールを作成すると、自動的に現行のルール・セットに追加されます。既存のルールをルール・セットに追加することもできます。また、ルール・セットにルールを追加せずに、今後作成するルール・セットのテンプレートとして使用することもできます。
ルール・セットの評価は、評価オプション(「すべてTrue」または「いずれかTrue」)を使用するルールの評価に依存します。ルール・セットが無効である場合、Oracle Database Vaultは、ルールを評価せずにルール・セットをTrueに評価します。
ルールの評価、ルールのネスト、および特定のユーザー(スーパー・システム管理者など)を除外するルールの作成方法は、「ルール・セットの動作」を参照してください。
ルール・セットにルールを作成および追加するには、次のようにします。
Oracle Database Vaultの「管理」ページで、「ルール・セット」を選択します。
「ルール・セット」ページで、ルールを作成および追加するルール・セットを選択し、「編集」を選択します。
「ルール・セットの編集」ページで、「ルール・セットに関連付けられたルール」にスクロールし、「作成」を選択します。
「ルールの作成」ページで、次の設定を入力します。
名前: ルールの名前を入力します。大/小文字混在で最大で90文字まで入力できます。
名前は動詞から始めて、ルールの目的で完了することをお薦めします。たとえば、次のようになります。
Prevent non-admin access to SQL*Plus
ルールには「説明」フィールドがないため、明示的な名前を必ず90文字以下で付けてください。
ルール式: 次の要件に一致するPL/SQL式を入力します。
SQLのWHERE
句で有効な式。
次に示すような、独立していて有効なPL/SQLブール式。
TO_CHAR(SYSDATE,'HH24') = '12'
ブール(TRUE
またはFALSE
)値と評価される式。
255文字以内である必要があります。
現行のデータベース・インスタンスからの既存のコンパイルされたPL/SQLファンクションを含む式。完全修飾ファンクションであることを確認してください(schema
. function_name
)。完全なSQL文は含めないでください。
アプリケーション・パッケージ・ファンクションまたはスタンドアロン・ファンクションを使用する場合は、ファンクションのGRANT EXECUTE
権限のあるDVSYS
アカウントを付与する必要があります。これを行うことで、新しいルールを追加するときに発生するエラーが少なくなります。
ルールが機能することを確認してください。SQL*Plusで次の文を実行すると、構文をテストできます。
SELECT rule_expression FROM DUAL;
たとえば、次のルール式を作成したとします。
SYS_CONTEXT('USERENV','SESSION_USER') != 'SQL*Plus'
この式は、次のようにテストできます。
SELECT SYS_CONTEXT('USERENV','SESSION_USER') FROM DUAL;
ルール・セット式で使用可能なファンクションについては、次の項を参照してください。
その他の式の例は、Oracle Database Vaultが提供するルール・セットに定義されているルールを参照してください。これらのルール・セットは、「デフォルトのルール・セット」に記載されています。
「OK」をクリックします。
「ルール・セットの編集」ページが表示されます。デフォルトで、新しいルールはルール・セットに追加されます。
ルールの編集
ルールへの変更は、そのルールを含むすべてのルール・セットに適用されます。
ルールを編集するには、次のようにします。
「ルール・セットの編集」ページで、「ルール・セットに関連付けられたルール」にスクロールします。
編集するルールを選択して、「編集」をクリックします。
「ルールの編集」ページで、必要に応じてルールを変更します。
「OK」をクリックします。
ルール・セットからのルールの削除
ルール・セットからルールを削除する前に、それに関連するOracle Database Vaultビューに問い合せることで、そのルールへの様々な参照を特定できます。詳細は、「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
「ルール・セットの編集」ページで、「ルール・セットに関連付けられたルール」にスクロールします。
削除するルールを選択して、「削除」をクリックします。
「確認」ページで「はい」をクリックします。
ルール・セットからルールを削除しても、そのルールはまだ存在します。必要に応じて、そのルールをその他のルール・セットに関連付けることができます。ルールを削除する場合は、「DVSYS.DBMS_MACADMのルール・セット・プロシージャ」で説明されているDVSYS.DBMS_MACADM.DELETE_RULE
ファンクションを使用します。たとえば、ルールNight Shiftを削除するには、Database Vault所有者としてSQL*Plusにログインして、次の文を入力します。
EXEC DVSYS.DBMS_MACADM.DELETE_RULE('Night Shift');
ルール・セットを削除する前に、それに関連するOracle Database Vaultビューに問い合せることで、そのルール・セットへの様々な参照を特定できます。詳細は、「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
コマンド・ルールなど、その他のDatabase Vaultオブジェクトがルール・セットを参照している場合は、参照を削除します。
ルール・セットを削除できるのは、そのルール・セットを参照しているその他のDatabase Vaultオブジェクトがない場合のみです。
Oracle Database Vaultの「管理」ページで、「ルール・セット」を選択します。
「ルール・セット」ページで、削除するルール・セットを選択します。
「削除」をクリックします。
「確認」ページで「はい」をクリックします。
ルール・セットが削除されます。ただし、ルール・セットに関連付けられているルールは削除されません。
この項では、ルール・セットがどのように機能するかを次の内容で説明します。
ルール・セット内のルールは、式の集合として評価されます。「評価オプション」が「すべてTrue」に設定されている場合にルールの評価に失敗すると、ルール・セット内の残りのルールの評価は試行されず、その時点で評価が停止します。同様に、「評価オプション」が「いずれかTrue」に設定されている場合にルールがTrueと評価されると、評価はその時点で停止します。ルール・セットが無効である場合、Oracle Database Vaultは、ルールを評価せずにルール・セットをTrueと評価します。
一般的に、ルール・セット内に表示されるルールの順序は、最終結果には影響しません。ルール・セットによってアクションが許可されるか阻止されるかのいずれかです。ただし、この順序はパフォーマンスに影響します。1つのルール内に複数のルールを配置し、AND
またはOR
演算子を使用してルールの優先順位を設定することで、ルールのパフォーマンスを改善できます。
ルール・セット内に1つ以上のルールをネストできます。たとえば、Is Corporate Network During Maintenanceという、次の2つのタスクを実行するネストされたルールを作成するとします。
データベース・セッションが企業ネットワーク内から発生した場合のみ、表の変更を制限します。
午後10時〜午後10時59分の間にスケジュールされているシステム・メンテナンスの時間帯に、表の変更を制限します。
ルールの定義は次のようになります。
DVF.F$NETWORK = 'Corporate' AND TO_CHAR(SYSDATE,'HH24') '22' AND '23'
これは、ファクタ・ファンクションを使用して作成できます。詳細は、「Oracle Database VaultのPL/SQLファクタ・ファンクション」を参照してください。ファクタの作成方法は、第7章で説明しています。
1人のユーザー(たとえばスーパー・システム管理者)を除く全員に適用するルールを作成することも可能です。このタイプのルールのルール定義は、次のようになります。
SYS_CONTEXT('USERENV','SESSION_USER') = 'SUPERADMIN_USER' OR additional_rule
現行ユーザーがスーパー・システム管理者の場合、システムでは、additional_rule
は評価されず、ルールはTrueに評価されます。現行ユーザーがスーパー・システム管理者でない場合、ルールの評価はadditional_rule
の評価によって決まります。
次のチュートリアルでは、ユーザーがメンテナンスの時間帯以外に表を変更しようとするとトリガーされる電子メール・アラートを作成します。それには、メンテナンスの時間帯を設定するルールを作成し、このルールをルール・セットに追加してから、ユーザーに表の変更を許可するコマンド・ルールを作成する必要があります。次に、ルール・セットをこのコマンド・ルールに関連付けます。これにより、ユーザーがメンテナンスの時間帯以外にALTER TABLE
SQL文を使用しようとすると、電子メール・アラートが送信されます。
このチュートリアルの内容は次のとおりです。
SYSDBA
権限を使用してSYS
としてSQL*Plusにログインし、UTL_MAIL
パッケージをインストールします。
sqlplus "sys / as sysdba"
Enter password: password
@?/rdbms/admin/utlmail.sql
@?/rdbms/admin/prvtmail.plb
UTL_MAIL
パッケージにより、電子メールの管理が可能になります。UTL_MAIL
の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
SMTP_OUT_SERVER
パラメータの現行値を調べ、このチュートリアル完了時に元に戻せるように、この値をメモしておきます。
たとえば、次のようになります。
SHOW PARAMETER SMTP_OUT_SERVER
次のような出力結果が表示されます。
NAME TYPE VALUE ----------------------- ----------------- ---------------------------------- SMTP_OUT_SERVER string some_value.example.com
次のALTER SYSTEM
文を発行します。
ALTER SYSTEM SET SMTP_OUT_SERVER="imap_mail_server.example.com";
imap_mail_server
を、電子メール・ツールのアカウント設定にあるSMTPサーバーの名前に置き換えます。これらの設定を引用符で囲んでください。たとえば、次のようになります。
ALTER SYSTEM SET SMTP_OUT_SERVER="my_imap_mail_server.example.com"
SYSOPER
権限を使用してSYS
として接続し、データベースを再起動します。
CONNECT SYS/AS SYSOPER
Enter password: password
SHUTDOWN IMMEDIATE
STARTUP
SMTP_OUT_SERVER
パラメータの設定が正しいことを確認します。
CONNECT SYS/ADMIN AS SYSDBA
Enter password: password
SHOW PARAMETER SMTP_OUT_SERVER
次のような出力結果が表示されます。
NAME TYPE VALUE ----------------------- ----------------- ---------------------------------- SMTP_OUT_SERVER string my_imap_mail_server.example.com
SYSDBA
権限を使用してSYS
として接続していることを確認し、Database Vault所有者アカウントに次の権限を付与します。
たとえば、次のようになります。
CONNECT SYS/AS SYSDBA
Enter password: password
GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO dbvowner;
GRANT EXECUTE ON UTL_TCP TO dbvowner;
GRANT EXECUTE ON UTL_SMTP TO dbvowner;
GRANT EXECUTE ON UTL_MAIL TO dbvowner;
GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO dbvowner;
PL/SQLパッケージUTL_TCP
、UTL_SMTP
、UTL_MAIL
およびDBMS_NETWORK_ACL_ADMIN
は、これから作成する電子メール・セキュリティ・アラートで使用されます。
Oracle Database所有者(DV_OWNER
)アカウントとしてSQL*Plusに接続します。
たとえば、次のようになります。
CONNECT dbvowner
Enter password: password
次のプロシージャを作成します。
CREATE OR REPLACE PROCEDURE email_alert AS msg varchar2(20000) := 'Realm violation occurred for the ALTER TABLE Command Security Policy rule set. The time is: '; BEGIN msg := msg||to_char(SYSDATE, 'Day DD MON, YYYY HH24:MI:SS'); UTL_MAIL.SEND ( sender => 'youremail@example.com', recipients => 'recipientemail@example.com', subject => 'Table modification attempted outside maintenance!', message => msg); END email_alert; /
youremail@example.com
を自分の電子メール・アドレスに置き換え、recipientemail@example.com
を通知を受け取るユーザーの電子メール・アドレスに置き換えます。
このプロシージャに対するEXECUTE
権限をDVSYS
に付与します。
GRANT EXECUTE ON email_alert TO DVSYS;
UTL_MAIL
などのPL/SQLネットワーク・ユーティリティを使用するには、あらかじめ、外部ネットワーク・サービスに対してファイングレイン・アクセスを有効にするアクセス制御リスト(ACL)ファイルを構成する必要があります。このトピックの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
電子メール・アラートのアクセス制御リストを構成するには、次のようにします。
Database Vault所有者としてSQL*Plusにログインし、次のアクセス制御リストおよびその権限定義を作成します。
BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'email_alert_permissions.xml', description => 'Enables permissions for the e-mail alert', principal => 'DBVOWNER', is_grant => TRUE, privilege => 'connect', start_date => null, end_date => null); END; /
プリンシパル設定のユーザー名は、大文字で正確に入力してください。このチュートリアルでは、Database Vault所有者アカウントの名前(DBVOWNER
など)を入力します。
アクセス制御リストを電子メール・サーバーの送信SMTPネットワーク・ホストに割り当てます。
BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl => 'email_alert_permissions.xml', host => 'SMTP_OUT_SERVER_setting', lower_port => port, upper_port => port); END; /
この例では、次のようになります。
SMTP_OUT_SERVER_setting
: 「手順1: UTL_MAIL PL/SQLパッケージのインストールおよび構成」でSMTP_OUT_SERVER
パラメータに設定したSMTP_OUT_SERVER
設定を入力します。この設定は、電子メール・ツールで送信サーバーに指定されている設定と完全に一致させてください。
port
: 電子メール・ツールで送信サーバーに指定されているポート番号を入力します。通常、この設定は25です。lower_port
とupper_port
の両方の設定に対してこの値を入力します。
変更をデータベースにコミットします。
COMMIT;
これまでに作成した設定をテストします。
EXEC EMAIL_ALERT; COMMIT;
SQL*Plusに「PL/SQL procedure successfully completed
」というメッセージが表示されます。まもなく、メール・サーバーの速度に応じて、電子メール・アラートを受信します。
ORA-24247
エラーに続いてORA-06512
エラーが発生する場合は、アクセス制御リスト・ファイルの設定をチェックしてください。
次のルール・セットを作成します。
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'ALTER TABLE Command Security Policy', description => 'This rule set allows ALTER TABLE only during the maintenance period.', enabled => 'Y', eval_options => 1, audit_options => POWER(2,0), fail_options => 2, fail_message => '', fail_code => NULL, handler_options => POWER(2,0), handler => 'dbavowner.email_alert'); END; /
次のようなルールを作成します。
ここでは、テストする間持続するようにルールを設定します。たとえば、午後2時から午後3時までの時間帯にテストする場合、次のようにルールを作成します。
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Restrict Access to Maintenance Period', rule_expr => 'TO_CHAR(SYSDATE,''HH24'') BETWEEN ''14'' AND ''15'''); END; /
HH24
、14
および15
には、二重引用符ではなく、必ず2つの一重引用符を使用してください。コンピュータのシステム時間は、次のSQL文を発行して二重にチェックできます。
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
次のような出力結果が表示されます。
TO -- 14
後から、ルールの動作に問題がなければ、次のように、サイトで通常メンテナンス作業が実行される時間(たとえば、午後7時から午後10時までの間)にルールを更新できます。
BEGIN DVSYS.DBMS_MACADM.UPDATE_RULE( rule_name => 'Restrict Access to Maintenance Period', rule_expr => 'TO_CHAR(SYSDATE,''HH24'') BETWEEN ''19'' AND ''22'''); END; /
Restrict Access to Maintenance PeriodルールをALTER TABLE Command Security Policyルール・セットに追加します。
BEGIN DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'ALTER TABLE Command Security Policy', rule_name => 'Restrict Access to Maintenance Period'); END; /
次のコマンド・ルールを作成します。
BEGIN DVSYS.DBMS_MACADM.CREATE_COMMAND_RULE( command => 'ALTER TABLE', rule_set_name => 'ALTER TABLE Command Security Policy', object_owner => 'SCOTT', object_name => '%', enabled => 'Y'); END; /
これらの更新をデータベースにコミットします。
COMMIT;
ユーザーSCOTT
としてSQL*Plusに接続します。
たとえば、次のようになります。
CONNECT SCOTT
Enter password: password
SCOTT
アカウントがロックされて無効になっている場合、DV_ACCTMGR
ロールを持つユーザーが、このアカウントのロックを解除し、新しいパスワードを次のように作成できます。
ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY password;
password
をセキュアなパスワードに置き換えます。パスワードを作成するための最小限の要件は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
ユーザーSCOTT
として、テスト表を作成します。
CREATE TABLE mytest (col1 number);
コンピュータのシステム時間を、ALTER TABLE Command Security Policyルール・セットが実行される時間に変更します。
たとえば、テスト時間帯を午後2時から午後3時の間に設定する場合、次のようにします。
UNIXシステム: rootとしてログインし、date
コマンドを使用して時間を設定します。たとえば、今日の日付が2007年12月13日だとすると、次のように入力します。
$ su root
Password: password
$ date 12131409
Microsoft Windows: 通常画面の右下隅にある時計アイコンをダブルクリックします。「日付と時刻のプロパティ」ウィンドウで、時刻を午後2時に設定し、「OK」をクリックします。
my_test
表の変更を試みます。
ALTER TABLE mytest ADD (col2 number); Table altered.
SCOTT
は、この時間帯にmytest
表を変更できます。
システム時間をRestrict Access to Maintenance Period時間外の時刻に再設定します。
SCOTT
としてログインし、再度my_test
表の変更を試みます。
CONNECT SCOTT
Enter password: password
ALTER TABLE mytest ADD (col3 number);
次のような出力結果が表示されます。
ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-47400: Command Rule violation for alter table on SCOTT.MYTEST ORA-06512: at "DVSYS.AUTHORIZE_EVENT", line 55 ORA-06512: at line 31
SCOTT
はmytest
表を変更できません。まもなく、「Table modification attempted outside maintenance!
」という件名で、次のようなメッセージの電子メールを受信します。
Realm violation occurred for the ALTER TABLE Command Security Policy rule set. The time is: Wednesday 28 NOV, 2007 14:24:25
システム時間を正しい時刻に再設定します。
Oracle Database所有者(DV_OWNER
)アカウントとしてSQL*Plusに接続します。たとえば、次のようになります。
CONNECT dbvowner
Enter password: password
次に示した順序で、Oracle Database Vaultルール・コンポーネントを削除します。
SQL> EXEC DVSYS.DBMS_MACADM.DELETE_RULE_FROM_RULE_SET ('ALTER TABLE Command Security Policy', 'Restrict Access to Maintenance Period'); EXEC DVSYS.DBMS_MACADM.DELETE_RULE('Restrict Access to Maintenance Period'); EXEC DVSYS.DBMS_MACADM.DELETE_COMMAND_RULE('ALTER TABLE', 'SCOTT', '%'); EXEC DVSYS.DBMS_MACADM.DELETE_RULE_SET('ALTER TABLE Command Security Policy');
email_alert
PL/SQLプロシージャを削除します。
DROP PROCEDURE email_alert;
アクセス制御リストを削除します。
EXEC DBMS_NETWORK_ACL_ADMIN.DROP_ACL ('email_alert_permissions.xml');
ユーザーSCOTT
として接続し、mytest
表を削除します。
CONNECT SCOTT
Enter password: password
DROP TABLE mytest;
SYSDBA
権限を使用してSYS
として接続し、Oracle Database所有者(DV_OWNER
)アカウントから、PL/SQLパッケージUTL_TCP
、UTL_SMTP
およびUTL_MAIL
に対するEXECUTE
権限を取り消します。
たとえば、次のようになります。
REVOKE EXECUTE ON UTL_TCP FROM dbvowner; REVOKE EXECUTE ON UTL_SMTP FROM dbvowner; REVOKE EXECUTE ON UTL_MAIL FROM dbvowner; REVOKE EXECUTE ON DBMS_NETWORK_ACL_ADMIN from dbvowner;
SMTP_OUT_SERVER
パラメータを元の値に設定します。
たとえば、次のようになります。
ALTER SYSTEM SET SMTP_OUT_SERVER="some_value.example.com";
SYSOPER
権限を使用してSYS
として接続し、データベースを再起動します。
CONNECT SYS/AS SYSOPER
Enter password: password
SHUTDOWN IMMEDIATE
STARTUP
ルールは、複数のルール・セット間で共有できます。これにより、再利用可能なルール式のライブラリを作成できます。個別で式の目的が1つであるルールを設計することをお薦めします。
再利用性とルール式で使用される値の信頼性を実現するために、ルール式にはOracle Database Vaultファクタを利用します。ファクタにはルール式で使用可能なコンテキスト情報が用意されています。
カスタム・イベント・ハンドラを使用して、Oracle Database Vaultセキュリティ・ポリシーを拡張し、エラー処理またはアラート通知のための外部システムを統合できます。このような統合を行うには、UTL_TCP
、UTL_HTTP
、UTL_MAIL
、UTL_SMTP
またはDBMS_AQ
などのOracleユーティリティ・パッケージを使用すると便利です。
機密データを保護するレルムやコマンド・ルールにルール・セットを適用する前に、テスト・データベース、または機密データ以外のデータ用のテスト・レルムやコマンド・ルール上で、様々なアカウントやシナリオに関してルール・セットを十分にテストします。次のSQL文を使用して、ルール式を直接テストできます。
SQL> SELECT SYSDATE from DUAL where rule expression
単一のルールにルール式をネストできます。これにより、ルールのサブセットに論理的AND
、およびその他のルールに論理的OR
が必要になる複雑な状況を作成できます。この一例として、「チュートリアル: セキュリティ違反の電子メール・アラートの作成」に記載されているIs Corporate Network During Maintenanceルール・セットの定義を参照してください。
一般的に、ルールが多く複雑になるほど、これらのルール・セットで制御されている特定の操作を実行する際のパフォーマンス・オーバーヘッドが増加します。たとえば、SELECT
文を制御するルール・セットに大量のルールが含まれる場合は、パフォーマンスが大幅に低下する可能性があります。
多数のルールが必要なルール・セットがある場合、すべてのルールを単一のPL/SQLスタンドアロンまたはパッケージ・ファンクションに定義されているロジックに移動すると、パフォーマンスが向上します。
ただし、ルールが他のルール・セットに使用されている場合、システムのパフォーマンスにはほとんど影響ありません。
Oracle Enterprise Manager(デフォルトでOracle DatabaseとともにインストールされるOracle Enterprise Manager Database Controlを含む)、Statspack
およびTKPROF
などのツールを実行してシステム・パフォーマンスを確認できます。Oracle Enterprise Managerの詳細は、Oracle Enterprise Managerのドキュメント・セットを参照してください。Database Controlの詳細は、オンライン・ヘルプを参照してください。Statspack
およびTKPROF
ユーティリティについては、『Oracle Databaseパフォーマンス・チューニング・ガイド』で説明されています。
表5-1に、ルール・セットおよびそのルールの分析に便利なOracle Database Vaultレポートを示します。これらのレポートの実行方法の詳細は、第16章「Oracle Database Vaultレポート」を参照してください。
表5-1 ルール・セットに関連するレポート
レポート | 説明 |
---|---|
|
ルールが定義されていない、または有効でないルール・セットが表示されます。 |
|
不完全または無効なルール・セットのあるセキュア・アプリケーション・ロールが表示されます。 |
|
不完全または無効なルール・セットが表示されます。 |
表5-2に、既存のルールおよびルール・セットに関する情報を提供するデータ・ディクショナリ・ビューを示します。