前回のおさらい
こんにちは。
前回はロックダウン・プロファイルの概要を紹介しました。
本ビジネスブログの右側のカテゴリー[Oracle Database管理] > [マルチテナント] から確認できます。
今回はロックダウン・プロファイルの有効化/無効化をご紹介します。
検証環境の紹介
前回は機能概要ということで、環境の紹介は割愛していました。
今回は、簡単に紹介致します。
DBバージョン | 18.3.0.0.0 for Linux x86-64 |
構成 | Restart Singleインスタンス |
CDB名 | ORCL |
PDB名 | PDBORCL |
PDBORCL2 |
先日、Linux向け18.3.0.0.0が公開されたため、せっかくなので18cのgridとDBをインストールしてみた環境にしました。
PDBロックダウン・プロファイルの機能は12cでも使用可能です!
前回のラストでロックダウン・プロファイルを有効化していましたが、今回の開始状況として、一旦ロックダウン・プロファイルを解除しています。
ロックダウン・プロファイルの有効化/無効化
それでは、状況を確認してみましょう。
まずは、全PDBからロックダウン・プロファイルが解除されていることを確認しましょう。
$ sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on 土 11月 24 17:35:00 2018 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0 に接続されました。 SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDBORCL READ WRITE NO 4 PDBORCL2 READ WRITE NO SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown PDB$SEED pdb_lockdown PDBORCL pdb_lockdown PDBORCL2 pdb_lockdown SQL>
ロックダウン・プロファイルの制御はPDB_LOCKDOWN初期化パラメータによって行います。
各PDBで、本パラメータに指定されているプロファイルが有効となります。
前回、CDBから設定していたのに、PDBのパラメータによって有効化されるの?
ロックダウン・プロファイルは、PDB利用者の作業を制限するため、CDB全体に設定する制限となります。
そのため、CDBから全PDBに対して設定します。
PDBの利用者が自分のPDBから設定を外したら意味がないのでは?
その通りです。
そのため、通常、PDB_LOCKDOWN初期化パラメータの変更を禁止する設定をプロファイルに組み込みます。
今回は前回設定していたプロファイルを有効化してみます。
※実際には、プロファイルも事前に作成します。プロファイルの作成は、次回紹介します!
まずは、定義済みのプロファイルを確認します。
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select profile_name, rule_type, status, rule, clause, clause_option from dba_lockdown_profiles where profile_name = 'TEST_PROFILE' order by 2,3,6; PROFILE_NAME RULE_TYPE STATUS RULE CLAUSE CLAUSE_OPTION ------------ --------- ------- -------------------- -------- ------------------------- TEST_PROFILE STATEMENT DISABLE ALTER SYSTEM SET PDB_LOCKDOWN TEST_PROFILE STATEMENT DISABLE ALTER SESSION SET PDB_LOCKDOWN TEST_PROFILE STATEMENT DISABLE ALTER SYSTEM SET SGA_TARGET TEST_PROFILE STATEMENT DISABLE ALTER SESSION SET SGA_TARGET SQL>
RULEで指定されたSQL文のうち、CLAUSEとCLAUSE_OPTIONが一致しているものについて、STATUS列の通り、許可/禁止を制限します。
※指定がないものについては、STATUSがenable(許可)とみなされます。
上記では、PDB_LOCKDOWN初期化パラメータとSGA_TARGET初期化パラメータの変更が、ALTER SYSTEMとALTER SESSIONの両方で禁止されています。
私も本稿を作成中に忘れてしまい、あわてて直したのですが、ALTER SYSTEMだけでなくALTER SESSIONも忘れずに制限するようにしてください。
ALTER SYSTEMを制限していても、ALTER SESSIONの制限を忘れてしまってはあまり意味がありません。
さて、上記のTEST_PROFILEをさっそく有効化してみましょう。
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown PDB$SEED pdb_lockdown PDBORCL pdb_lockdown PDBORCL2 pdb_lockdown SQL> alter system set pdb_lockdown=test_profile scope=both; システムが変更されました。 SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown TEST_PROFILE PDB$SEED pdb_lockdown TEST_PROFILE PDBORCL pdb_lockdown TEST_PROFILE PDBORCL2 pdb_lockdown TEST_PROFILE SQL>
これでTEST_PROFILEプロファイルが全PDBで有効化されました。
変更ができないことを確認してみましょう。
SQL> alter session set container=PDBORCL; セッションが変更されました。 SQL> alter system set sga_target=700M container=current scope=both; alter system set sga_target=700M container=current scope=both * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています SQL> alter session set container=PDBORCL2; セッションが変更されました。 SQL> alter system set sga_target=700M container=current scope=both; alter system set sga_target=700M container=current scope=both * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています SQL> alter session set container=PDBORCL; セッションが変更されました。 SQL> alter system set PDB_LOCKDOWN='' container=current scope=both; alter system set PDB_LOCKDOWN='' container=current scope=both * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています SQL>
このとおり、SGA_TARGETを変更できなくなりました。
また、PDBからロックダウン・プロファイルを解除できないこともわかるかと思います。
PDBから変更できないのは分かったけれど、CDB管理者もメンテナンスで変更できないの?
ロックダウン・プロファイルで禁止した操作をCDBの管理者が実行する場合、ALTER SESSIONでCDB管理者が設定を変更するセッションのみ、ロックダウン・プロファイルを変更して行います。
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown TEST_PROFILE PDB$SEED pdb_lockdown TEST_PROFILE PDBORCL pdb_lockdown TEST_PROFILE PDBORCL2 pdb_lockdown TEST_PROFILE SQL> alter session set pdb_lockdown=''; セッションが変更されました。 SQL> alter session set container=PDBORCL; セッションが変更されました。 SQL> alter system set sga_target=700M container=current scope=both; システムが変更されました。 SQL> show parameter sga_target; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_target big integer 700M SQL> alter session set container=cdb$root; セッションが変更されました。 SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown PDB$SEED pdb_lockdown PDBORCL pdb_lockdown PDBORCL2 pdb_lockdown SQL>
上記の通り、CDB管理者の管理用セッションはロックダウン・プロファイルが解除されました。
この時、別のセッションでは制限が有効になっていることを確認します。
sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on 土 11月 24 19:34:57 2018 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0 に接続されました。 SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; 2 NAME NAME VALUE ------------------------------ ------------------------------ ------------------------------ CDB$ROOT pdb_lockdown TEST_PROFILE PDB$SEED pdb_lockdown TEST_PROFILE PDBORCL pdb_lockdown TEST_PROFILE PDBORCL2 pdb_lockdown TEST_PROFILE SQL>
このとおり、別のセッションからは制限が有効なままのため、制限を維持したままパラメータの変更ができました。
上記の手順で、特定のPDBのみロックダウン・プロファイルを解除したり、PDBによって異なるプロファイルを設定することも可能です。
ロックダウン・プロファイルの解除方法は、上記の手順をALTER SYSTEMで実行するのみとなります。
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown TEST_PROFILE PDB$SEED pdb_lockdown TEST_PROFILE PDBORCL pdb_lockdown TEST_PROFILE PDBORCL2 pdb_lockdown TEST_PROFILE SQL> alter system set pdb_lockdown='' scope=both; システムが変更されました。 SQL> select c.name,p.name,p.value from v$containers c, v$parameter2 p where upper(p.name)='PDB_LOCKDOWN' order by c.con_id; NAME NAME VALUE -------------------- -------------------- ------------------------------ CDB$ROOT pdb_lockdown PDB$SEED pdb_lockdown PDBORCL pdb_lockdown PDBORCL2 pdb_lockdown SQL>
次回はプロファイルの編集方法について紹介!
今回、ロックダウン・プロファイルの有効化/無効化の方法を紹介しました。
次回は、プロファイルの編集方法を紹介します。
次回もよろしくお願いいたします!