- データベース管理者のための主要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
に設定されたときにローカル・レルムが作成されていた場合は、新しいコントロール後もローカル・レルムは存在しますが、強制は無視されます。