- データベース管理者のための主要20c新機能の学習
- データベース管理者のための主要20c新機能の学習
- セキュリティ・ソリューション
- Oracle Database Vault
- ローカルのOracle Database Vaultポリシーが共通操作をブロックしないようにする機能
- 演習: ローカル・ユーザーによる共通操作のブロックの防止 - コマンド・ルール
演習: ローカル・ユーザーによる共通操作のブロックの防止 - コマンド・ルール
この演習では、共通ユーザーが自分のオブジェクトに対してコマンドを実行したりそのオブジェクトが存在するPDBにログインすることさえ妨げるOracle Database Vaultコントロールを、ローカル・ユーザーが共通ユーザーに対して作成できないようにする方法を示します。
- 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
- 演習を開始する前に、
/home/oracle/labs/M104781GC10/setup_DV_CR.sh
シェル・スクリプトを実行します。このシェル・スクリプトでは、CDBルート・レベルおよびPDBレベルでDatabase Vaultを構成して有効にし、共通ユーザーC##TEST1
およびC##TEST2
を作成します。$ cd /home/oracle/labs/M104781GC10 $ /home/oracle/labs/M104781GC10/setup_DV_CR.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 ... 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 Wed Feb 19 11:14:29 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> GRANT dba to c##test1 CONTAINER=ALL; Grant succeeded. ... 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 SQL*Plus: Release 20.0.0.0.0 - Production on Mon Mar 9 12:18:01 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Last Successful login time: Mon Mar 09 2020 12:16:12 +00:00 Enter password: password SQL> SELECT * FROM DVSYS.DBA_DV_COMMON_OPERATION_STATUS; NAME STATU ------------------------- ----- DV_ALLOW_COMMON_OPERATION FALSE SQL>
ステータスが
TRUE
に設定されている場合は、次のコマンドを使用してFALSE
に設定します。SQL> EXEC DBMS_MACADM.ALLOW_COMMON_OPERATION (FALSE) PL/SQL procedure successfully completed. SQL> SELECT * FROM DVSYS.DBA_DV_COMMON_OPERATION_STATUS; NAME STATU ------------------------- ----- DV_ALLOW_COMMON_OPERATION FALSE SQL>
- 共通ユーザー
C##TEST1
にコマンド・ルールが適用されていない場合に、共通ユーザーC##TEST1
がCDBルートおよびPDB20
に接続できるかどうかをテストします。C##TEST1
としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL>
C##TEST1
としてPDB20
に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL>
- CDBルートの共通ユーザー
C##TEST1
にコマンド・ルールが適用されている場合に、共通ユーザーC##TEST1
がCDBルートおよびPDB20
に接続できるかどうかをテストします。- CDBルートの
C##TEST1
に対してコマンド・ルールを作成します。SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_CONNECT_COMMAND_RULE( rule_set_name => 'Disabled', user_name => 'C##TEST1', enabled => 'y', scope => DBMS_MACUTL.G_SCOPE_LOCAL); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
C##TEST1
としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password ERROR: ORA-47400: Command Rule violation for CONNECT on LOGON Warning: You are no longer connected to ORACLE. SQL> !oerr ora 47400 47400, 00000, "Command Rule violation for %s on %s" // *Cause: An operation that was attempted failed due to a command rule // violation // *Action: Ensure you have sufficient privileges for this operation retry // the operation SQL>
C##TEST1
としてPDB20
に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL>
- コマンド・ルールを削除します。
SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_CONNECT_COMMAND_RULE('C##TEST1',DBMS_MACUTL.G_SCOPE_LOCAL) PL/SQL procedure successfully completed. SQL>
- CDBルートの
PDB20
の共通ユーザーC##TEST1
にコマンド・ルールが適用されている場合に、共通ユーザーC##TEST1
がCDBルートおよびPDB20
に接続できるかどうかをテストします。PDB20
のC##TEST1
に対してコマンド・ルールを作成します。SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_CONNECT_COMMAND_RULE( rule_set_name => 'Disabled', user_name => 'C##TEST1', enabled => 'y', scope => DBMS_MACUTL.G_SCOPE_LOCAL); 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>
C##TEST1
としてPDB20
に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password ERROR: ORA-47400: Command Rule violation for CONNECT on LOGON Warning: You are no longer connected to ORACLE. SQL>
- コマンド・ルールを削除します。
SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_CONNECT_COMMAND_RULE('C##TEST1',DBMS_MACUTL.G_SCOPE_LOCAL) PL/SQL procedure successfully completed. SQL>
C##SEC_ADMIN
としてCDBルートに接続し、共通ユーザーが自分のオブジェクトが存在するPDBにログインするのを妨げるOracle Database Vaultコントロールを、ローカル・ユーザーが共通ユーザーに対して作成できないようにします。DV_ALLOW_COMMON_OPERATION
をTRUE
に設定します。SQL CONNECT c##sec_admin Enter password: password 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>
パラメータを指定せずにこのプロシージャを実行して
TRUE
の結果を実現することもできます。- CDBルートの共通ユーザー
C##TEST1
にコマンド・ルールが適用されている場合に、共通ユーザーC##TEST1
がCDBルートおよびPDB20
に接続できるかどうかをテストします。- CDBルートの
C##TEST1
に対してコマンド・ルールを作成します。SQL> BEGIN DBMS_MACADM.CREATE_CONNECT_COMMAND_RULE( rule_set_name => 'Disabled', user_name => 'C##TEST1', enabled => 'y', scope => DBMS_MACUTL.G_SCOPE_LOCAL); END; / 2 3 4 5 6 7 8 PL/SQL procedure successfully completed. SQL>
C##TEST1
としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password ERROR: ORA-47400: Command Rule violation for CONNECT on LOGON Warning: You are no longer connected to ORACLE. SQL> !oerr ora 47400 47400, 00000, "Command Rule violation for %s on %s" // *Cause: An operation that was attempted failed due to a command rule // violation // *Action: Ensure you have sufficient privileges for this operation retry // the operation SQL>
C##TEST1
としてPDB20
に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL>
- コマンド・ルールを削除します。
SQL> CONNECT c##sec_admin Enter password: password Connected. SQL> EXEC DBMS_MACADM.DELETE_CONNECT_COMMAND_RULE('C##TEST1',DBMS_MACUTL.G_SCOPE_LOCAL) PL/SQL procedure successfully completed. SQL>
- CDBルートの
PDB20
の共通ユーザーC##TEST1
にコマンド・ルールが適用されている場合に、共通ユーザーC##TEST1
がCDBルートおよびPDB20
に接続できるかどうかをテストします。PDB20
のC##TEST1
に対してコマンド・ルールを作成します。SQL> CONNECT sec_admin@PDB20 Enter password: password Connected. SQL> BEGIN DBMS_MACADM.CREATE_CONNECT_COMMAND_RULE( rule_set_name => 'Disabled', user_name => 'C##TEST1', enabled => 'y', scope => DBMS_MACUTL.G_SCOPE_LOCAL); END; / 2 3 4 5 6 7 8 BEGIN * ERROR at line 1: ORA-47110: cannot create command rules for C##TEST1.% ORA-06512: at "DVSYS.DBMS_MACADM", line 1872 ORA-06512: at "DVSYS.DBMS_MACADM", line 2263 ORA-06512: at line 2 SQL> !oerr ORA 47110 47110, 00000, "cannot create command rules for %s.%s" // *Cause: When ALLOW COMMON OPERATION was set to TRUE, a smaller scope user was not allowed to create command rules on a larger scope user's object. // *Action: When ALLOW COMMON OPERATION is TRUE, do not create command rules on a larger scope user's object. SQL>
C##TEST1
としてCDBルートに接続します。SQL> CONNECT c##test1 Enter password: password Connected. SQL>
C##TEST1
としてPDB20
に接続します。SQL> CONNECT c##test1@PDB20 Enter password: password Connected. SQL> EXIT $
- 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 $
DBMS_MACADM.ALLOW_COMMON_OPERATION
がTRUE
に設定されると、Database Vaultによって不適切なコマンド・ルールの作成がブロックされるだけでなく、DBMS_MACADM.ALLOW_COMMON_OPERATION
がFALSE
に設定されたときに作成された既存のローカル・コマンド・ルールが制御下に入ります。既存のローカル・コマンド・ルールは引き続き存在しますが、強制は無視されます。