5 コマンド・ルール
コマンド・ルールは、1つ以上のデータベース・オブジェクトに影響するOracle Database SQL文を保護します。これらの文は、SELECT
、ALTER SYSTEM
、データベース定義言語(DDL)およびデータ操作言語(DML)文を含められます。コマンド・ルールをカスタマイズして実行するには、1つ以上のルールの集合であるルール・セットにコマンド・ルールを関連付けます。コマンド・ルールは実行時に実施されます。コマンド・ルールは、オブジェクトが存在するレルムに関係なく、コマンド・ルールによって保護されるSQL文の使用を試みる全員に影響します。
5.1 破壊的なアクションを防止するコマンド・ルールの作成
コマンド・ルールの作成はオプションですが、悪意のあるアクティビティや特権ユーザーによるミスからデータベース・オブジェクトやデータを保護するのに役立ちます。コマンド・ルールによって、TRUNCATETABLE
、DROP INDEX
、DROP PROCEDURE
などの破壊的なコマンドを防止できます。
たとえば、HR
スキーマが表を削除しないようにします:
C##JSMITH
として接続します:connect c##jsmith
HR
のDROP TABLE
機能を無効にします:BEGIN DVSYS.DBMS_MACADM.CREATE_COMMAND_RULE( command => 'DROP TABLE' ,object_owner => 'HR' ,object_name => '%' ,rule_set_name => 'Disabled' ,enabled => dbms_macutl.g_yes); END; /
このコマンド・ルールの結果、
HR
スキーマ・オブジェクトに対してDROP TABLE
コマンドを実行するすべてのユーザーは、Database Vaultコマンド・ルールに違反しているとみなされます。これは、ルール・セットでコマンドがDisabled
に指定されているためです。Disabled
ルール・セットの結果は常にfalseを返すため、コマンド・ルールでは、HR
データベース・スキーマ自体を含むすべてのデータベース・ユーザーのHR
スキーマに対するDROP TABLE
コマンドが無効になります。Database Vaultコマンド・ルールもルール・セットも無効ではないため、
Disabled
というrule_set_name
はわかりにくいように見える場合があります。かわりに、Disabled
ルール・セットには、常にfalseを返すルール式を含むルールが含まれ、そのルール・セットに関連付けられたコマンドの実行は許可されません。ルール式のSQLは、次のものを使用して表示できます:select rule_name, rule_expr from dba_dv_rule_set_rule where rule_set_name = 'Disabled';
次の出力が表示されます。RULE_NAME RULE_EXPR -------------------- -------------------- False 1=0
すべての状況で
HR
スキーマのDROP TABLE
コマンドを無効にしない場合は、カスタムDatabase Vaultルール・セットを使用して、コマンドを使用できるタイミングを識別できます。- コマンド・ルールをシミュレーション・モードに切り替える場合は、強制ではなく、
ENABLED
パラメータをDBMS_MACUTL.G_YES
ではなくDBMS_MACUTL.G_SIMULATION
に設定します:BEGIN DVSYS.DBMS_MACADM.UPDATE_COMMAND_RULE( command => 'DROP TABLE' ,object_owner => 'HR' ,object_name => '%' ,rule_set_name => 'Disabled' ,enabled => dbms_macutl.g_simulation); END; /
シミュレーション(非強制)モード: Oracle Database Vaultシミュレーション・モードでは、Oracle Database Vaultレルムで保護するデータにアクセスしているユーザーを特定できます。Database Vaultレルム認可リストの違反のみが記録されます。
- コマンド・ルールに違反したユーザーを特定するには、
DVSYS.DBA_DV_SIMULATION_LOG
ビューを問い合せます。select username, command, violation_type, sqltext from DVSYS.DBA_DV_SIMULATION_LOG;
Oracle Database Vaultシミュレーション・モードの詳細は、『Oracle Database Vault管理者ガイド』のエラーのトラブルシューティングとトレースの項を参照してください。
5.2 指定したIPアドレスからのみアクションを許可するコマンド・ルールの作成
特定のコマンドを限定されたIPアドレスから実行できるようにするコマンド・ルールを作成できます。
たとえば、承認されたIPアドレスからコマンドを実行する場合にのみ表を削除するHR
スキーマは、次のとおりです:
C##JSMITH
として接続します:connect c##jsmith
- 受入れ基準を満たすルールを作成します:
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Trusted IP Address' ,rule_expr => 'sys_context(''userenv'',''ip_address'') = ''<IP Address>'' '); END; /
ルールは、接続ユーザーのセッションのIPアドレスがルール式のIPアドレスと等しい場合にのみ、
TRUE
を返します。これは、IN
リストまたは「等しくない」リストです。ホスト名またはホスト名の一部を比較できます。 - ルール・セットの作成:
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'Trusted Rule Set' ,description => 'A rule set for controlling access by IP address' ,enabled => 'Y' ,eval_options => dbms_macutl.g_ruleset_eval_any ,audit_options => null ,fail_options => dbms_macutl.g_ruleset_fail_show ,fail_message => 'Access is blocked. Contact the IT helpdesk.' ,fail_code => '-20000' ,handler_options => dbms_macutl.g_ruleset_handler_off ,handler => null ,is_static => true); END; /
ルール・セットには、一般的なエラー・メッセージまたはカスタム・エラー・メッセージを返すオプションがあります。次の例では、エンド・ユーザーに、セキュリティ・チームに確認するように指示する詳細なエラー・メッセージを提供します。
- ルール・セットにステップ2のルールを追加します:
BEGIN DVSYS.DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Trusted Rule Set' ,rule_name => 'Trusted IP Address'); END; /
ルール・セットは、すべてを満たす(true)か、少なくとも1つのルールがtrueである必要がある複数のルールで構成できます。ルールは複数のルール・セットで使用できます。ただし、ルールを変更すると、そのルールが使用されているすべてのルール・セットに変更が適用されます。
- 既存のコマンド・ルールを更新して、新しいルール・セットを使用します:
BEGIN DVSYS.DBMS_MACADM.UPDATE_COMMAND_RULE( command => 'DROP TABLE' ,object_owner => 'HR' ,object_name => '%' ,rule_set_name => 'Trusted Rule Set' ,enabled => dbms_macutl.g_yes); END; /
5.3 アプリケーション認証を制御するコマンド・ルールの作成
アプリケーション資格証明の使用方法を制御するDatabase Vaultコマンド・ルールを作成して、データベース・アプリケーション資格証明の盗難または誤用によるリスクを最小限に抑えます。
アプリケーション資格証明の盗難は、組織のデータに対する最大のリスクの1つです。アプリケーション資格証明は、構成ファイルまたはスクリプトに格納されることが多く、開発者や管理者によって頻繁に認識されるため、これらの資格証明を使用して個人を特定することは困難です。
C##JSMITH
として、HRアプリケーション・スキーマがOracle Databaseに接続する方法を制限するDatabase Vaultルール、ルール・セットおよびコマンド・ルールを作成します。
C##JSMITH
として接続します:connect c##jsmith@pdb_name
- 次の4つのルールを作成します:
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Trusted Application IP Address' ,rule_expr => 'sys_context(''userenv'',''ip_address'') = ''<IP Address>'' '); END; /
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Trusted Application Hostname' ,rule_expr => 'sys_context(''userenv'',''host'') = ''appserver'' '); END; /
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Trusted Application OS USer' ,rule_expr => 'sys_context(''userenv'',''os_user'') = ''appuser'' '); END; /
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Trusted Application Program' ,rule_expr => 'sys_context(''userenv'',''client_program_name'') = ''<client program name>'' '); END; /
- ルール・セットを作成します:
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'Trusted Application Path' ,description => 'Controlling access to the application' ,enabled => 'Y' ,eval_options => dbms_macutl.g_ruleset_eval_all ,audit_options => null ,fail_options => dbms_macutl.g_ruleset_fail_show ,fail_message => 'Unauthorized application usage. Contact the IT helpdesk.' ,fail_code => '-20000' ,handler_options => dbms_macutl.g_ruleset_handler_off ,handler => null ,is_static => true); END; /
EVAL_OPTIONS
パラメータをALL
に設定すると、このルール・セットがtrueと評価されるために、すべてのルールがtrueと評価される必要があります。 - ステップの各ルールをルール・セットに追加します:
-
BEGIN DVSYS.DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Trusted Application Path' ,rule_name => 'Trusted Application IP Address'); END; /
-
BEGIN DVSYS.DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Trusted Application Path' ,rule_name => 'Trusted Application Hostname'); END; /
-
BEGIN DVSYS.DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Trusted Application Path' ,rule_name => 'Trusted Application OS User'); END; /
-
BEGIN DVSYS.DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Trusted Application Path' ,rule_name => 'Trusted Application Program); END; /
-
HR
が接続を試行したときに信頼できるアプリケーション・パス・ルール・セットを評価するコマンド・ルールを作成します:BEGIN DVSYS.DBMS_MACADM.CREATE_CONNECT_COMMAND_RULE( user_name => 'HR' ,rule_set_name => 'Trusted Application Path' ,enabled => dbms_macutl.g_yes); END; /
HR
として接続を試行します:connect hr@pdb_name
次のカスタム・エラー・メッセージが表示されます:
ORA-47306: 20000: Unauthorized application usage. Contact the IT helpdesk.
- 作成したコマンド・ルールを無効にして、このガイドの他の例を続行します:
C##JSMITH
として接続します:connect c##jsmith@pdb_name
- コマンドを無効にします:
BEGIN DVSYS.DBMS_MACADM.UPDATE_CONNECT_COMMAND_RULE( user_name => 'HR' ,rule_set_name => 'Trusted Application Path' ,enabled => dbms_macutl.g_no); END; /
- 接続のコマンド・ルールが無効になっていることを確認します:
SELECT ENABLED FROM DBA_DV_COMMAND_RULE WHERE COMMAND = 'CONNECT' AND OBJECT_OWNER = 'HR';
次のように表示されます:ENABLED __________ N