- データベース管理者のための主要20c新機能の学習
- データベース管理者のための主要20c新機能の学習
- セキュリティ・ソリューション
- Oracle Database Vault
- ローカルのOracle Database Vaultポリシーが共通操作をブロックしないようにする機能
- 演習: ローカル・ユーザーによる共通操作のブロックの防止 - レルム
演習: ローカル・ユーザーによる共通操作のブロックの防止 - レルム
この演習では、共通ユーザーがPDB内の自分のスキーマのローカル・データにアクセスするのを妨げるOracle Database Vaultコントロールを、ローカル・ユーザーが共通ユーザー・オブジェクトに作成できないようにする方法を示します。PDBのローカルDatabase Vault所有者は、DVSYSやCTXSYSなどの共通Oracleスキーマの周囲にレルムを作成し、正しく機能しないようにできます。この演習の目的として、この機能を示すためにC##TEST1カスタム・スキーマがCDBルートに作成されます。
               
- 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
- 演習を開始する前に、/home/oracle/labs/M104781GC10/setup_DV.shシェル・スクリプトを実行します。このシェル・スクリプトでは、CDBルート・レベルでDatabase Vaultを構成して有効にし、ルート・コンテナにHR.G_EMP表を作成し、PDBレベルでDatabase Vaultを構成して有効にし、PDB20にHR.L_EMP表を作成します。$ cd /home/oracle/labs/M104781GC10 $ /home/oracle/labs/M104781GC10/setup_DV.sh $ ./setup_DV_CDB.sh SQL*Plus: Release 20.0.0.0.0 - Production on Wed Feb 19 05:38:54 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> drop user c##sec_admin cascade; drop user c##sec_admin cascade * ERROR at line 1: ORA-01918: user 'C##SEC_ADMIN' does not exist SQL> create user c##sec_admin identified by password container=ALL; User created. SQL> grant create session, set container, restricted session, DV_OWNER to c##sec_admin container=ALL; Grant succeeded. SQL> drop user c##accts_admin cascade; drop user c##accts_admin cascade * ERROR at line 1: ORA-01918: user 'C##ACCTS_ADMIN' does not exist SQL> create user c##accts_admin identified by password container=ALL; User created. SQL> grant create session, set container, DV_ACCTMGR to c##accts_admin container=ALL; Grant succeeded. SQL> grant select on sys.dba_dv_status to c##accts_admin container=ALL; Grant succeeded. SQL> EXIT Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 ... Copyright (c) 1982, 2020, Oracle. All rights reserved. Last Successful login time: Tue Feb 18 2020 08:26:21 +00:00 SQL> DROP TABLE g_emp; Table dropped. SQL> CREATE TABLE g_emp(name CHAR(10), salary NUMBER) ; Table created. SQL> INSERT INTO g_emp values('EMP_GLOBAL',1000); 1 row created. SQL> COMMIT; Commit complete. SQL> EXIT Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 18 08:27:58 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Last Successful login time: Tue Feb 18 2020 08:27:54 +00:00 Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> DROP TABLE l_emp; Table dropped. SQL> CREATE TABLE l_emp(name CHAR(10), salary NUMBER); Table created. SQL> INSERT INTO l_emp values('EMP_LOCAL',2000); 1 row created. SQL> COMMIT; Commit complete. SQL> EXIT Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 18 08:27:58 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Last Successful login time: Tue Feb 18 2020 08:27:54 +00:00 Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> DROP TABLE l_tab; Table dropped. SQL> CREATE TABLE l_tab(code NUMBER); Table created. SQL> INSERT INTO l_tab values(1); 1 row created. SQL> INSERT INTO l_tab values(2); 1 row created. SQL> COMMIT; Commit complete. SQL> EXIT Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 $
- C##SEC_ADMINとしてCDBルートに接続し、- DV_ALLOW_COMMON_OPERATIONのステータスを確認します。これはデフォルトの動作で、ローカル・ユーザーは共通ユーザー・オブジェクトにDatabase Vaultコントロールを作成できます。- $ sqlplus c##sec_admin Enter password: password SQL> SELECT * FROM DVSYS.DBA_DV_COMMON_OPERATION_STATUS; NAME STATU ------------------------- ----- DV_ALLOW_COMMON_OPERATION FALSE SQL>
- C##TEST1オブジェクトにレルムが適用されていない場合に、CDBルートの表- C##TEST1.G_EMPと- PDB20の表- C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
 
- 表の共通所有者である
- CDBルートのC##TEST1オブジェクトに標準レルムが適用されている場合に、CDBルートの表HR.G_EMPとPDB20の表C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- CDBルートのC##TEST1表に共通標準レルムを作成します。SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Root Test Realm', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 0); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Root Test Realm', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; SELECT * FROM c##test1.g_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- レルムを削除します。SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Root Test Realm') PL/SQL procedure successfully completed. SQL>
 
- CDBルートの
- CDBルートのC##TEST1オブジェクトに必須レルムが適用されている場合に、CDBルートの表C##TEST1.G_EMPとPDB20の表C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- CDBルートのC##TEST1表に共通必須レルムを作成します。SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Root Test Realm', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 1); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Root Test Realm', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; SELECT * FROM c##test1.g_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; SELECT * FROM c##test1.g_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- レルムを削除します。SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Root Test Realm') PL/SQL procedure successfully completed. SQL>
 
- CDBルートの
- PDB20の- C##TEST1オブジェクトにPDB標準レルムが適用されている場合に、CDBルートの表- C##TEST1.G_EMPと- PDB20の表- C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- PDB20の- C##TEST1表にPDB標準レルムを作成します。- SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Test Realm', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 0); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Test Realm', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; SELECT * FROM c##test1.l_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- レルムを削除します。SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Test Realm') PL/SQL procedure successfully completed. SQL>
 
- PDB20の- C##TEST1オブジェクトにPDB必須レルムが適用されている場合に、CDBルートの表- C##TEST1.G_EMPと- PDB20の表- C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- PDB20の- C##TEST1表にPDB必須レルムを作成します。- SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Test Realm', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 1); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Test Realm', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; SELECT * FROM c##test1.l_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; SELECT * FROM c##test1.l_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- レルムを削除します。SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Test Realm') PL/SQL procedure successfully completed. SQL>
 
- CDBルートにC##SEC_ADMINとして接続し、ローカル・ユーザーが共通ユーザーC##TEST1オブジェクトにOracle Database Vaultコントロールを作成できないように制限します。DV_ALLOW_COMMON_OPERATIONをTRUEに設定します。SQL CONNECT c##sec_admin Enter password: password Connected. SQL> SELECT * FROM DVSYS.DBA_DV_COMMON_OPERATION_STATUS; NAME STATU ------------------------- ----- DV_ALLOW_COMMON_OPERATION FALSE SQL> EXEC DBMS_MACADM.ALLOW_COMMON_OPERATION PL/SQL procedure successfully completed. SQL> SELECT * FROM DVSYS.DBA_DV_COMMON_OPERATION_STATUS; NAME STATU ------------------------- ----- DV_ALLOW_COMMON_OPERATION TRUE SQL>
- CDBルートのC##TEST1オブジェクトに標準レルムが適用されている場合に、CDBルートの表C##TEST1.G_EMPとPDB20の表C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- CDBルートのC##TEST1表に共通標準レルムを作成します。SQL CONNECT c##sec_admin Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Root Test Realm', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 0); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Root Test Realm', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; SELECT * FROM c##test1.g_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- レルムを削除します。SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Root Test Realm') PL/SQL procedure successfully completed. SQL>
 
- CDBルートの
- CDBルートのC##TEST1オブジェクトに必須レルムが適用されている場合に、CDBルートの表C##TEST1.G_EMPとPDB20の表C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- CDBルートのC##TEST1表に共通必須レルムを作成します。SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Root Test Realm', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 1); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Root Test Realm', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; SELECT * FROM c##test1.g_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; SELECT * FROM c##test1.g_emp * ERROR at line 1: ORA-01031: insufficient privileges SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- レルムを削除します。SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Root Test Realm') PL/SQL procedure successfully completed. SQL>
 
- CDBルートの
- PDB20の- C##TEST1オブジェクトにPDB標準レルムが適用されている場合に、CDBルートの表- C##TEST1.G_EMPと- PDB20の表- C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- PDB20の- C##TEST1表にPDB標準レルムを作成します。- SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Test Realm1', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 0); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Test Realm1', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 BEGIN * ERROR at line 1: ORA-47286: cannot add %, C##TEST1.% to a realm ORA-06512: at "DVSYS.DBMS_MACADM", line 1059 ORA-06512: at line 2 SQL> !oerr ora 47286 47286, 00000, "cannot add %s, %s.%s to a realm" // *Cause: When ALLOW COMMON OPERATION was set to TRUE, a smaller scope user was not allowed to add a larger scope user's object or a larger scope role to a realm. // *Action: When ALLOW COMMON OPERATION is TRUE, do not add a larger scope user's object or a larger scope role to a realm. SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- レルムを削除します。SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Test Realm1') PL/SQL procedure successfully completed. SQL>
 
- PDB20の- C##TEST1オブジェクトにPDB必須レルムが適用されている場合に、CDBルートの表- C##TEST1.G_EMPと- PDB20の表- C##TEST1.L_EMPの両方でデータにアクセスできるかどうかをテストします。- PDB20の- C##TEST1表にPDB必須レルムを作成します。- SQL> BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Test Realm1', description => 'Test Realm description', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL, realm_type => 1); END; / 2 3 4 5 6 7 8 9 PL/SQL procedure successfully completed. SQL> BEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM( realm_name => 'Test Realm1', object_owner => 'C##TEST1', object_name => '%', object_type => '%'); END; / 2 3 4 5 6 7 8 BEGIN * ERROR at line 1: ORA-47286: cannot add %, C##TEST1.% to a realm ORA-06512: at "DVSYS.DBMS_MACADM", line 1059 ORA-06512: at line 2 SQL>
- 表の共通所有者であるC##TEST1としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 別の共通ユーザーであるC##TEST2としてCDBルートに接続します。SQL> CONNECT c##test2 Enter password: password Connected. SQL> SELECT * FROM c##test1.g_emp; NAME SALARY ---------- ---------- EMP_GLOBAL 1000 SQL>
- 表の共通所有者であるC##TEST1としてPDB20に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- 別の共通ユーザーであるC##TEST2としてPDB20に接続します。SQL> CONNECT c##test2@PDB20 Enter password: password Connected. SQL> SELECT * FROM c##test1.l_emp; NAME SALARY ---------- ---------- EMP_LOCAL 2000 SQL>
- レルムを削除します。SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_REALM_CASCADE('Test Realm1') PL/SQL procedure successfully completed. SQL>
 
- PDBとCDBルートの両方でDatabase Vaultを無効にします。$ /home/oracle/labs/M104781GC10/disable_DV.sh SQL*Plus: Release 20.0.0.0.0 - Production on Mon Apr 6 15:25:59 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Mon Apr 06 2020 15:23:56 +00:00 Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> exec DVSYS.DBMS_MACADM.DISABLE_DV PL/SQL procedure successfully completed. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Mon Apr 6 15:26:00 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Mon Apr 06 2020 15:23:58 +00:00 Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> exec DVSYS.DBMS_MACADM.DISABLE_DV PL/SQL procedure successfully completed. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Mon Apr 6 15:26:02 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Mon Apr 6 15:26:23 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to an idle instance. SQL> STARTUP ORACLE instance started. Total System Global Area 6442447392 bytes Fixed Size 9581088 bytes Variable Size 1090519040 bytes Database Buffers 5318377472 bytes Redo Buffers 23969792 bytes Database mounted. Database opened. SQL> ALTER PLUGGABLE DATABASE all OPEN; Pluggable database altered. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 $
DV_ALLOW_COMMON_OPERATION値を切り替えたときのPDBの共通ユーザー・オブジェクトに対するデータ・アクセスの動作をまとめてみましょう。
                  | FALSE | TRUE | |||||
|---|---|---|---|---|---|---|
| C##TEST1 | C##TEST2 | C##TEST1 | C##TEST2 | |||
| CDBルートの共通標準レルムまたは共通必須レルム | 変化なし | 変化なし | 変化なし | 変化なし | ||
| PDB通常レルム | アクセス | ブロック | アクセス | アクセス | ||
| PDB必須レルム | ブロック | ブロック | アクセス | アクセス | 
通常または必須のレルムをCDBルートに作成し、通常または必須のPDBレルムを作成した場合かつDV_ALLOW_COMMON_OPERATIONがTRUEの場合は、共通ユーザー・オブジェクトのデータにアクセスできます。
                  
DV_ALLOW_COMMON_OPERATIONがFALSEに設定されたときにローカル・レルムが作成されていた場合は、新しいコントロール後もローカル・レルムは存在しますが、強制は無視されます。