2. レルムの作成と認可を行う
このページでは、Database Vault のレルムを作成し、指定したオブジェクトをレルムに追加します。 また、ユーザーにアクセス権を付与し、条件付きでアクセスを制御するレルム認可を設定します。
設定のイメージは以下図のようになります。

此処から先はC##DVOWNERユーザーやSYSユーザーなど実行するユーザーが混じります。それぞれのユーザーで接続した端末を用意しておくことを推奨します。
-- sysユーザーsql sys/<password>@localhost:1521/freepdb1 as sysdba
-- C##DVOWNERユーザーsql c##dvowner/<password>@localhost:1521/freepdb1
-- C##DVACCTMGRsql c##dvowner/<password>@localhost:1521/freepdb1HRユーザー、SALES_APPユーザー、APPユーザーの作成および権限設定については以下の別ベージにありますので、まだ作成されていない場合はご参照ください。
- HRユーザーの設定 (サンプルスキーマ)
- SALES_APPユーザーの作成
- APPユーザーの作成
- 有効化した状態でのSYSユーザーの制限確認
- レルムの作成
- オブジェクトのレルム登録
- レルム認可の設定
現時点でのSYSユーザーの制約を確認する
Section titled “現時点でのSYSユーザーの制約を確認する”レルム設定の前にこの時点での特権ユーザーの制限を確認しておきます。 Database Vaultを有効化した時点でSYSユーザーによる管理操作が制限され、ユーザーが作成できないことが分かります。
-- PDB-- SYSユーザーでユーザー作成を試みるSQL> show user con_nameUSER is "SYS"CON_NAME------------------------------FREEPDB1
SQL> CREATE USER test;
Error starting at line : 1 in command -CREATE USER testError report -ORA-01031: insufficient privilegesHelp: https://docs.oracle.com/error-help/db/ora-01031/
01031. 00000 - "insufficient privileges"*Document: YES*Cause: A database operation was attempted without the required privilege(s).*Action: Ask your database administrator or security administrator to grant you the required privilege(s).ただ、この時点ではレルムはまだ作成していないため、表は参照することができます。
SQL> select count(*) from hr.jobs;
COUNT(*)___________ 19レルムの作成(Realm for demo)
Section titled “レルムの作成(Realm for demo)”以下のSQLで、デモ用のレルムを作成します。(*)がつくものはデフォルトで設定されるもののため、明示的に設定する必要はありません。
C##DVOWNERユーザーでPDBに接続し、以下を実行します。
BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Realm for demo', -- レルム名 description => 'This realm is created for demonstration', -- レルムの説明 enabled => DBMS_MACUTL.G_YES, -- (*)作成直後から有効化 audit_options => DBMS_MACUTL.G_REALM_AUDIT_OFF, -- (*)レルムの監査を無効 realm_type => 1, -- 必須レルムを有効化 realm_scope => DBMS_MACUTL.G_SCOPE_LOCAL, -- (*)レルムはローカルの範囲で動作 pl_sql_stack => FALSE -- (*)PL/SQLスタック検証は行わない );END;/作成したレルムは DVSYS.DBA_DV_REALM から確認できます。
SQL> select name, description, realm_type from dvsys.dba_dv_realm;
NAME DESCRIPTION REALM_TYPE____________________________________________________ _____________________________________________________________________________________________________________________________________________________ _____________Oracle Database Vault Defines the realm for the Oracle Database Vault schemas - DVSYS and DVF where Database Vault access control configuration and roles are contained. MANDATORYOracle Label Security Defines the realm for the Oracle Label Security schemas and roles - LBACSYS and LBAC_DBA. MANDATORYDatabase Vault Account Management Defines the realm for administrators who create and manage database accounts and profiles. REGULAROracle Enterprise Manager Defines the Enterprise Manager monitoring and management realm. REGULAROracle Default Schema Protection Realm Defines the realm for the Oracle Default schemas. REGULAROracle System Privilege and Role Management Realm Defines the realm to control granting of system privileges and database administrator roles. REGULAROracle Default Component Protection Realm Defines the realm to protect default components of the Oracle database. REGULAROracle Audit Defines the realm to protect audit related objects of the Oracle database. MANDATORYOracle GoldenGate Protection Realm Defines the realm to protect GoldenGate-related objects of the Oracle database. MANDATORYRealm for demo This realm is created for demonstration MANDATORY
10 rows selected.オブジェクトのレルムへの登録
Section titled “オブジェクトのレルムへの登録”保護したいオブジェクト(例:HR.COUNTRIES, HR.REGIONS)をレルムに登録します。 C##DVOWNERユーザーで実行します。
-- HR.COUNTRIES表を登録BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Realm for demo', object_owner => 'HR', object_name => 'COUNTRIES', object_type => 'TABLE' );END;/
-- HR.REGIONS表を登録BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Realm for demo', object_owner => 'HR', object_name => 'REGIONS', object_type => 'TABLE' );END;/object_name, object_typeではワイルドカード '%' が使用することができますので、HRスキーマ内のオブジェクトを一括で登録することも可能です。
登録したオブジェクトは以下のコマンドで確認できます。
SQL> select REALM_NAME, OWNER, OBJECT_NAME, OBJECT_TYPE from DVSYS.DBA_DV_REALM_OBJECT where realm_name = 'Realm for demo';
REALM_NAME OWNER OBJECT_NAME OBJECT_TYPE_________________ ________ ______________ ______________Realm for demo HR COUNTRIES TABLERealm for demo HR REGIONS TABLEレルム認可の設定
Section titled “レルム認可の設定”このままではオブジェクトの持ち主であるHRユーザーでさえも、レルム内のオブジェクトにアクセスすることができません。
そのためレルム認可を設定し、レルム内のオブジェクトにアクセスする権限を付与します。
所有者 (HR)
Section titled “所有者 (HR)”BEGIN DBMS_MACADM.ADD_AUTH_TO_REALM( realm_name => 'Realm for demo', -- レルム名 grantee => 'HR', -- 権限を付与するユーザ名またはロール名 auth_options => DBMS_MACUTL.G_REALM_AUTH_OWNER -- ユーザーを「所有者」として認可する );END;/参加者 (SALES_APP)
Section titled “参加者 (SALES_APP)”BEGIN DBMS_MACADM.ADD_AUTH_TO_REALM( realm_name => 'Realm for demo', -- レルム名 grantee => 'SALES_APP', -- 権限を付与するユーザ名またはロール名 auth_options => DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT -- ユーザーを「参加者」として認可する );END;/参加者 (APPユーザー)
Section titled “参加者 (APPユーザー)”APPユーザーに対してはIPアドレスでの制限を追加します。
-- ルールを作成BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Rule to restrict APP to specific IP', rule_expr => 'SYS_CONTEXT(''USERENV'',''IP_ADDRESS'') = ''159.13.49.55''', scope => DBMS_MACUTL.G_SCOPE_LOCAL );END;/
-- ルールを束ねたルールセットを作成BEGIN DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'Ruleset for APP', description => 'Rule to restrict APP to specific IP', enabled => DBMS_MACUTL.G_YES, -- (*) eval_options => DBMS_MACUTL.G_RULESET_EVAL_ALL, -- (*) audit_options => DBMS_MACUTL.G_RULESET_AUDIT_OFF, -- (*) fail_options => DBMS_MACUTL.G_RULESET_FAIL_SHOW, -- (*) fail_message => 'DV_Error: Can only be accessed from a specific IP address', fail_code => 20000, handler_options => DBMS_MACUTL.G_RULESET_HANDLER_OFF, -- (*) handler => '', is_static => FALSE, -- (*) scope => DBMS_MACUTL.G_SCOPE_LOCAL );END;/
-- ルールセットにルールを追加します。BEGIN DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Ruleset for APP', rule_name => 'Rule to restrict APP to specific IP', rule_order => 1, enabled => DBMS_MACUTL.G_YES -- (*) );END;/
-- ルールセットを指定してレルム認可を作成するBEGIN DBMS_MACADM.ADD_AUTH_TO_REALM( realm_name => 'Realm for demo', -- レルム名 grantee => 'APP', -- 権限を付与するユーザ名またはロール名 rule_set_name => 'Ruleset for APP', auth_options => DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT -- ユーザーを「参加者」として認可する );END;/設定したレルム認可を確認します。
SQL> select realm_name, grantee, AUTH_OPTIONS,AUTH_RULE_SET_NAME from DVSYS.DBA_DV_REALM_AUTH where realm_name = 'Realm for demo';
REALM_NAME GRANTEE AUTH_OPTIONS AUTH_RULE_SET_NAME_________________ ____________ _______________ _____________________Realm for demo APP Participant Ruleset for APPRealm for demo SALES_APP ParticipantRealm for demo HR Ownerこれで、Database Vaultのレルム作成と認可設定が完了です。次の手順にて実際に確認してみましょう。