[Database] Having fun with 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.
指定された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 件のコメント:

コメントを投稿