原文はこちら。
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.
指定されたPDBに接続中のローカル・ユーザーが使用可能な操作を制限するためのセキュリティ・メカニズム
概要はConcept Guideに、詳細はSecurity Guideに記載があります。
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' );
|
まず、ロックダウンプロファイルを作成する必要があります。
SQL> create lockdown profile P1;
|
続いて、プロファイルを変更し、ALTER SYSTEMを使ってoptimizer_modeとcursor_sharingだけを変更できるようにします。
SQL> alter lockdown profile P1 disable statement=( 'ALTER SYSTEM' ) clause=( 'SET' ) OPTION ALL EXCEPT =( 'optimizer_mode' , 'cursor_sharing' );
|
最後に、PDBロックダウンプロファイルを有効化する必要があります。
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
|
ほう。では、試してみましょう。
SQL> alter system set cursor_sharing= 'FORCE' ;
System altered.
SQL> alter system set optimizer_mode= 'FIRST_ROWS_10' ;
System altered.
|
OK、動きましたね。でもまだSQL_TRACEをセッションレベルで変更できるでしょうか?もちろんできます。
SQL> alter session set SQL_TRACE= TRUE ;
Session altered.
|
ALTER SYSTEM だけを制限したのであって、ALTER SESSIONを制限してはいませんから、理に適っていますね。
では、同様にこちらもやってみましょう。
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)
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
これはALTER SYSTEMを使う場合、ALTER SYSTEM FLUSH SHARED POOLコマンドのみを許可します。
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を使うと、非常に物事が複雑になり得ますし、同僚を苛立たせる可能性があります(しないでくださいね)。 あまり物事を複雑にしないでくださいね。
0 件のコメント:
コメントを投稿