Lockdown profile


تاریخ انتشار: 1398/اردیبهشت/22
نویسنده:
گروه دانش : Oracle Datebase
تعداد بازدید: 3 مرتبه
اشتراک گذاری:

Lockdown profile

یکی از ویژگی های جالب در نسخه 12.2، قابلیت Lockdown profile است. فرض کنید قرار است تا یک PDB را از دیتابیس اصلی clone بگیرید و به طور کامل به تیم توسعه تحویل دهید. پس لازم است تا دسترسی DBA را هم به تیم توسعه بدهید. این دسترسی ممکن است منجر به مشکلاتی در سیستم شود، مثلاً ممکن است با استفاده از utl_file فایل های زیادی در سیستم عامل تولید کنند، از قابلیتی استفاده کنند که لایسنس آن را نداریم و ...

صورت مسئله این است که چگونه می توانیم مطمئن شویم که کارهای تیم توسعه برای ما دردسری ایجاد نخواهد کرد؟

پاسخ این سوال، استفاده از قابلیت Lockdown Profile است که در نسخه 12.2 معرفی شد.

حالا به بررسی این قابلیت می پردازیم:

در ابتدا به CDB متصل می شویم و یک profile برای local DBA (کاربر DBA تیم توسعه در PDB خودشان) می سازیم:

SQL> create lockdown profile My_Profile;

Lockdown Profile created.

 

SQL> select profile_name,status from dba_lockdown_profiles;

PROFILE_NAME                   STATUS

------------------------------      -------

MY_PROFILE                         EMPTY

PRIVATE_DBAAS                  EMPTY

PUBLIC_DBAAS                    EMPTY

SAAS                                      EMPTY


غیرفعال کردن قابلیت های دیتابیس

فرض کنید می خواهیم قابلیت های partitioning و advanced queuing را برای پروفایل ساخته شده غیرفعال کنیم پس از دستور زیر استفاده می کنیم:

SQL> alter lockdown profile MY_PROFILE disable option = ('PARTITIONING','DATABASE QUEUING');

Lockdown Profile altered.

 

SQL> select RULE_TYPE,RULE,STATUS from dba_lockdown_profiles where profile_name = 'MY_PROFILE';  

 

RULE_TYPE            RULE             STATUS

-------------------- --------------------                -------

OPTION               DATABASE QUEUING DISABLE

OPTION               PARTITIONING       DISABLE

 

حالا می خواهیم این پروفایل را بر PDB مورد نظر (در این مثال HRPDB) اعمال کنیم:

SQL> alter session set container=hrpdb;

Session altered.

 

SQL> show parameter pdb_lockdown

NAME                                 TYPE VALUE

------------------------------------ ----------- ------------------------------

pdb_lockdown                         string

 

SQL> alter system set pdb_lockdown = 'MY_PROFILE';

System altered.

با اتصال به کاربر admin مربوط به PDB بررسی می کنیم تا مطمئن شویم که مثلاً قابلیت پارتیشن بندی جداول غیرفعال است:

$ sqlplus PDBADMIN@hrpdb

 

SQL> create table test_tbl(id number) partition by range (id) interval (10) (partition p1 values less than (10), partition p2 values less than (20));

 

create table test_tbl(id number) partition by range (id) interval (10) (partition p1 values less than (10), partition p2 values less than (20))

*

ERROR at line 1:

ORA-00439: feature not enabled: Partitioning


همچنین با استفاده از عبارت های ALL و EXCEPT میتوانیم تمام قابلیت ها را فعال یا غیر فعال کنیم یا برای فعال سازی یک یا چند قابلیت استثنا قائل شویم. به عنوان مثال با دستور زیر تمام قابلیت ها به غیر از Advanced Queuing را غیر فعال می کنیم:

SQL> alter session set container=cdb$root;

Session altered.

 

SQL> alter lockdown profile MY_PROFILE enable option all except = ('DATABASE QUEUING');

Lockdown Profile altered.

 

اگر دوباره برای ساخت جدول پارتشن شده در PDB اقدام کنیم دستور بدون خطا اجرا خواهد شد، زیرا تمام قابلیت ها به غیر از Advanced Queuing فعال شدند:

SQL> create table test_tbl(id number) partition by range (id) interval (10) (partition p1 values less than (10), partition p2 values less than (20));

Table created.


غیر فعال کردن امکان اجرای دستورات قدرتمند

فرض کنید که لازم است برنامه نویسان بتوانند در PDB خودشان امکان kill session داشته باشند. پس لازم است تا مجوز alter system را به آنها بدهیم ولی می دانیم که این دستور برای خراب کردن دیتابیس کافی است! پس می خواهیم تا تنها اجازه kill session بدهیم ولی دیگر دستورات alter system را غیر مجاز کنیم، پس با اتصال به CDB دستورات زیر را اجرا می کنیم:

SQL> alter session set container=cdb$root;

Session altered.

 

SQL> alter lockdown profile MY_PROFILE disable statement = ('ALTER SYSTEM') clause all except = ('KILL SESSION');

Lockdown Profile altered.

 

با کاربر pdbadmin به hrpdb متصل می شویم و تست می کنیم:

$ sqlplus PDBADMIN@hrpdb

SQL> select sid,serial# from v$session where username = 'HR';

 

      SID SERIAL#

---------- ----------

      278  31669

 

SQL> alter system kill session '278,31669' immediate;

System altered.

 

SQL> alter system set optimizer_dynamic_sampling=8;

 

alter system set optimizer_dynamic_sampling=8

*

ERROR at line 1:

ORA-01031: insufficient privileges

 

همچنین ممکن است بخواهیم تا pdbadmin تنها بتواند پارامترهای cursure_sharing  و optimizer_dynamic_sampling را تغییر بدهد. برای این کار می توانیم از دستور زیر استفاده کنیم:

SQL> alter session set container=cdb$root;

Session altered.

 

SQL> alter lockdown profile MY_PROFILE disable statement = ('ALTER SYSTEM') clause = ('SET');

Lockdown Profile altered.

 

SQL> alter lockdown profile MY_PROFILE enable statement = ('ALTER SYSTEM') clause = ('SET') option = ('cursor_sharing','optimizer_dynamic_sampling');

Lockdown Profile altered.


تست می کنیم:

$ sqlplus PDBADMIN@hrpdb

 

SQL> alter system set open_cursors=500;

alter system set open_cursors=500

*

ERROR at line 1:

ORA-01031: insufficient privileges

 

SQL> alter system set session_cached_cursors=100;

alter system set session_cached_cursors=100

                                         *

ERROR at line 1:

ORA-02096: specified initialization parameter is not modifiable with this

option

 

SQL> alter system set optimizer_dynamic_sampling=8;

System altered.

 

SQL> alter system set cursor_sharing = 'EXACT';

System altered.


غیرفعال کردن امکان اجرای پکیج های دیتابیس

فرض کنید می خوایم امکان اجرای پکیج قدرتمند utl_file را در PDB غیر ممکن کنیم، پس از دستور زیر استفاده می کنیم:

SQL> alter lockdown profile MY_PROFILE disable feature = ('UTL_FILE');