原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/having_fun_with_pdb_lockdown
Oracle Database 12.2(現時点ではOracle Database Cloud Serviceでご利用いただけます)には、PDBロックダウンプロファイルと呼ばれる新機能があります。実のところ、このパラメータはOracle Database 12.1.0.2に存在してはいたもののドキュメントに記載がなく、機能しませんでした。
データベース概要の用語集のページには以下のような説明があります。
では、同様にこちらもやってみましょう。
既存のプロファイルとその内容を検索できるでしょうか。
ちょっと困るところ
常に物事を簡素化し、管理を容易にすることについて話していますが、PDB Lockdown Profilesを使うと、非常に物事が複雑になり得ますし、同僚を苛立たせる可能性があります(しないでくださいね)。 あまり物事を複雑にしないでくださいね。
https://blogs.oracle.com/UPGRADE/entry/having_fun_with_pdb_lockdown
Oracle Database 12.2(現時点ではOracle Database Cloud Serviceでご利用いただけます)には、PDBロックダウンプロファイルと呼ばれる新機能があります。実のところ、このパラメータはOracle Database 12.1.0.2に存在してはいたもののドキュメントに記載がなく、機能しませんでした。
New (some undocumented) Parameters in Oracle 12.1.0.2
https://blogs.oracle.com/UPGRADE/entry/new_undocumented_parameters_in_oracle
PDB Lockdown Profiles
PDB Lockdown Profilesは、主に高度に共有された環境でデータベースを使用しながらもセキュリティを必要とする場合に、アクセスの制限や有効化を細かく制御する方法です。このアイデアは、グラントの上に制限を埋め込む、すなわち特定のグラントを取り除く、というものです。たとえば、ALTER SYSTEMを実行しているときに、特定のPDBにログインしたユーザーのみに対しoptimizer_modeおよびcursor_sharingパラメータを変更できるように許可することができます。データベース概要の用語集のページには以下のような説明があります。
A security mechanism to restrict operations that are available to local users connected to a specified PDB.概要はConcept Guideに、詳細はSecurity Guideに記載があります。
指定されたPDBに接続中のローカル・ユーザーが使用可能な操作を制限するためのセキュリティ・メカニズム
Oracle® Database Concepts 12c Release 2 (12.2)
Overview of PDB Lockdown Profiles
http://docs.oracle.com/database/122/CNCPT/overview-of-the-multitenant-architecture.htm#CNCPT-GUID-1F6D3E4F-786A-47A0-A36C-83BAB75FCDAE
Oracle® Database概要 12cリリース2 (12.2)
PDBロックダウン・プロファイルの概要
http://docs.oracle.com/cd/E82638_01/CNCPT/overview-of-the-multitenant-architecture.htm#GUID-1F6D3E4F-786A-47A0-A36C-83BAB75FCDAE
Oracle® Database Security Guide 12c Release 2 (12.2)
Using PDB Lockdown Profiles to Restrict Operations on PDBs
http://docs.oracle.com/database/122/DBSEG/configuring-privilege-and-role-authorization.htm#DBSEG-GUID-AB5E62DB-7E2A-4B5A-BA96-A2BD2DF15275
Oracle® Databaseセキュリティ・ガイド 12cリリース2 (12.2)
PDBロックダウン・プロファイルを使用したPDBでの操作の制限
http://docs.oracle.com/cd/E82638_01/DBSEG/configuring-privilege-and-role-authorization.htm#GUID-AB5E62DB-7E2A-4B5A-BA96-A2BD2DF15275
How-to-Lockdown-Profile
新規作成したPDBを使って始めます。まず、ロックダウンプロファイルを作成する必要があります。SQL> create pluggable database PDB2 admin user adm identified by adm file_name_convert=('/oradata/CDB2/pdbseed', '/oradata/CDB2/pdb2');
続いて、プロファイルを変更し、ALTER SYSTEMを使ってoptimizer_modeとcursor_sharingだけを変更できるようにします。SQL> create lockdown profile P1;
最後に、PDBロックダウンプロファイルを有効化する必要があります。SQL> alter lockdown profile P1 disable statement=('ALTER SYSTEM') clause=('SET') OPTION ALL EXCEPT=('optimizer_mode','cursor_sharing');
確認しましょう。SQL> alter system set PDB_LOCKDOWN=P1;
SQL> show parameter pdb_l
NAME TYPE VALUE
------------- ------- ------
pdb_lockdown string P1
Where the fun begins ...
では、デフォルトのSYSユーザーで接続しましょう。定義により、SYSは共通ユーザーです。PDB2に切り替えます。ほう。では、試してみましょう。$> sqlplus / as sysdba
SQL> alter session set container=PDB2;
SQL> alter system set sql_trace=TRUE;
*
ERROR at line 1:
ORA-01031: insufficient privileges
OK、動きましたね。でもまだSQL_TRACEをセッションレベルで変更できるでしょうか?もちろんできます。SQL> alter system set cursor_sharing='FORCE';
System altered.
SQL> alter system set optimizer_mode='FIRST_ROWS_10';
System altered.
ALTER SYSTEM だけを制限したのであって、ALTER SESSIONを制限してはいませんから、理に適っていますね。SQL> alter session set SQL_TRACE=TRUE;
Session altered.
では、同様にこちらもやってみましょう。
ドキュメントにはこんな例があります。SQL> alter session set container=cdb$root;
Session altered.
SQL> alter lockdown profile P1 disable statement=('ALTER SESSION') clause=('SET') OPTION ALL EXCEPT=('optimizer_mode','cursor_sharing')
Lockdown Profile altered.
CREATE LOCKDOWN PROFILE medium;
ALTER LOCKDOWN PROFILE medium DISABLE STATEMENT=('ALTER SYSTEM');
ALTER LOCKDOWN PROFILE medium ENABLE STATEMENT=('ALTER SYSTEM') CLAUSE=('FLUSH SHARED POOL');
Oracle® Database Concepts 12c Release 2 (12.2)これはALTER SYSTEMを使う場合、ALTER SYSTEM FLUSH SHARED POOLコマンドのみを許可します。
Example 19-6 Creating a PDB Lockdown Profile
http://docs.oracle.com/database/122/CNCPT/overview-of-the-multitenant-architecture.htm#CNCPT-GUID-B964031E-8ACE-4603-8F1E-DD173BE5BA01
Oracle® Database概要 12cリリース2 (12.2)
例19-6 PDBロックダウン・プロファイルの作成
http://docs.oracle.com/cd/E82638_01/CNCPT/overview-of-the-multitenant-architecture.htm#GUID-1F6D3E4F-786A-47A0-A36C-83BAB75FCDAE__GUID-AD907A15-AC08-4765-AE35-EFF48AE4014E
もちろん、既存のプロファイルに追加して、特定の機能を無効化することもできます。SQL> alter system set pdb_lockdown='MEDIUM';
alter system set pdb_lockdown='MEDIUM'
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> alter system set sql_trace=true;
alter system set sql_trace=true
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> alter session set container=cdb$root;
Session altered.
SQL> ALTER LOCKDOWN PROFILE medium DISABLE FEATURE=('XDB_PROTOCOLS');
Lockdown Profile altered
Which profiles do exist and what's defined?
まず第1に、PDB_LOCKDOWNパラメータはPDBレベルで変更可能です。つまりこれは異なるPDBごとに異なるプロファイルを持つことができます。しかしテストした限りでは、PDBで1個のプロファイルのみがアクティブで有効化することはできません。既存のプロファイルとその内容を検索できるでしょうか。
SQL> select profile_name, rule_type, rule, clause, clause_option, status from DBA_LOCKDOWN_PROFILES order by 1;
PROFILE_NAME RULE_TYPE RULE CLAUSE CLAUSE_OPTION STATUS
-------------- ---------- -------------- ---------- --------------- -------
MEDIUM STATEMENT ALTER SYSTEM DISABLE
MEDIUM FEATURE XDB_PROTOCOLS DISABLE
P1 STATEMENT ALTER SESSION SET CURSOR_SHARING ENABLE
P1 STATEMENT ALTER SYSTEM SET OPTIMIZER_MODE ENABLE
P1 STATEMENT ALTER SYSTEM SET CURSOR_SHARING ENABLE
P1 STATEMENT ALTER SESSION SET OPTIMIZER_MODE ENABLE
P1 STATEMENT ALTER SESSION SET DISABLE
P1 STATEMENT ALTER SYSTEM SET DISABLE
PRIVATE_DBAAS EMPTY
PUBLIC_DBAAS EMPTY
SAAS EMPTY
11 rows selected.
Summary
これは非常に強力な機能ですが、将来的には、特定のことがうまく動かない理由を調べるのが難しいかもしれません。ORA-1031のエラーが、常に正しいガイドをしてくれるでしょう。ちょっと困るところ
常に物事を簡素化し、管理を容易にすることについて話していますが、PDB Lockdown Profilesを使うと、非常に物事が複雑になり得ますし、同僚を苛立たせる可能性があります(しないでくださいね)。 あまり物事を複雑にしないでくださいね。