سوال: در محیط Multitenant چگونه می توان از تغییر مقدار پارامتری چون OPEN_CURSORS به عددی کمتر از 1000 و بیشتر از 2000 توسط کاربران حاضر در pdb جلوگیری کرد؟ و یا به طور کلی، مجوز هرگونه تغییر این پارامتر را غیرممکن ساخت؟
پاسخ: با ویژگی PDB Lockdown Profile که در نسخه 12c ارائه شد، این کار به راحتی قابل انجام است از طریق این ویژگی می توان تعدادی از قابلیتهای اوراکل را برای کاربران یک یا چند pdb غیرفعال کرد و یا محدودیتهایی را به لحاظ اجرای دستور برای این کاربران اعمال کرد.
به عبارت دقیق تر، با استفاده از این ویژگی می توان در سه سطح زیر محدودیتهای را برای کاربران اعمال کرد:
سطح statement: دستورات زیر را می توان برای کاربران محدود کرد:
ALTER DATABASE – ALTER PLUGGABLE DATABASE – ALTER SESSION – ALTER SYSTEM
سطح feature: این محدودیت در دو سطح bundle name و feature nameقابل اعمال است که صرفا به ذکر اسامی چند feature بسنده می کنیم:
AWR_ACCESS – SECURITY_POLICIES – UTL_HTTP – UTL_TCP
سطح option: گزینه هایی که می توان استفاده از انها را برای کاربران محدود کرد:
DATABASE QUEUING – PARTITIONING
در ادامه با ایجاد یک Lockdown Profile، به بررسی بیشتر این ویژگی خواهیم پرداخت و در پایان هم به سوال ابتدایی پاسخ خواهیم داد.
در ابتدا با اتصال به cdb، lockdown profileای را ایجاد می کنیم:
sqlplus “/as sysdba”
SQL> CREATE LOCKDOWN PROFILE mahdood;
Lockdown Profile created.
بعد از ایجاد این lockdown profile، محدودیتی را از نوع statement به ان اضافه می کنیم:
SQL> ALTER LOCKDOWN PROFILE mahdood DISABLE STATEMENT = (‘ALTER DATABASE’);
Lockdown Profile altered.
در صورت تنظیم این lockdown profile برای یک pdb، امکان استفاده از دستور alter database برای کاربران ان pdb امکان پذیر نخواهد بود. برای مشاهده لیست محدودیتهای این lockdown profile، می توان از ویوی dba_lockdown_profiles استفاده کرد:
select PROFILE_NAME,RULE,STATUS,USERS from dba_lockdown_profiles where PROFILE_NAME=’MAHDOOD’;
MAHDOOD ALTER DATABASE DISABLE ALL
حال قصد داریم این محدودیت را بر روی pdbای به نام us_pdb اعمال کنیم، برای این کار باید با اتصال به این pdb، پارامتر pdb_lockdown را به مقدار ‘MAHDOOD’ تنظیم کرد:
SQL> ALTER SESSION SET CONTAINER = us_pdb;
Session altered.
SQL> alter system set pdb_lockdown=’MAHDOOD’;
System altered.
با اعمال این محدودیت، هیچ یک از کاربران حاضر در این pdb، حق استفاده از دستور alter database را نخواهند داشت:
SQL> alter database begin backup;
ORA-01031: insufficient privileges
بدیهی است که با برداشتن این محدودیت، این دستور قابل اجرا خواهد بود:
SQL> alter system set pdb_lockdown=”;
System altered.
SQL> alter database begin backup;
Database altered.
حال با کمک دستور زیر، به سوال ابتدایی این نوشتار، پاسخ خواهیم داد:
ALTER LOCKDOWN PROFILE mahdood DISABLE STATEMENT = (‘ALTER SYSTEM’) CLAUSE = (‘SET’) OPTION = (‘OPEN_CURSORS’) MINVALUE = ‘1000’ MAXVALUE = ‘2000’;
با اتصال به کاربر usef در us_pdb، سعی در تغییر مقدار این پارامتر به عدد 500 داریم:
SQL> conn usef/a@us_pdb
Connected.
SQL> alter system set open_cursors=500;
ORA-01031: insufficient privileges
همانطور که می بینید، کاربر usef امکان اجرای این دستور را ندارد حال عددی بیشتر از 2000 را تست می کنیم:
SQL> alter system set open_cursors=4000;
ORA-01031: insufficient privileges
باز هم با خطا مواجه شدیم با تغییر مقدار این پارامتر به عدد 1500، اطمینان حاصل خواهد شد که تنها اعداد بین 1000 تا 2000 برای این پارامتر قابل اعمال می باشند:
SQL> alter system set open_cursors=1500;
System altered.
در پایان چند مثال از این ویژگی را از نظر میگذرانیم: –تنظیم محدودیت استفاده از دستور alter database open :
ALTER LOCKDOWN PROFILE MAHDOOD DISABLE STATEMENT = (‘ALTER DATABASE’) CLAUSE = (‘OPEN’);
–فعال کردن محدودیت استفاده از ویژگی NETWORK_ACCESS:
ALTER LOCKDOWN PROFILE MAHDOOD DISABLE FEATURE = (‘NETWORK_ACCESS’);
–با دستور زیر، تغییر مقدار هیچ یک از پارامترها برای کاربران امکان پذیر نخواهد بود:
ALTER LOCKDOWN PROFILE MAHDOOD DISABLE STATEMENT = (‘ALTER SYSTEM’) CLAUSE = (‘SET’) ;
همچنین برای غیرفعال کردن این محدودیتها، کافیست به جای عبارت DISABLE از عبارت ENABLE استفاده شود:
SQL> ALTER LOCKDOWN PROFILE mahdood ENABLE STATEMENT = (‘ALTER SYSTEM’);
Lockdown Profile altered.
پ.ن: برای اعمال این LOCKDOWN PROFILE در سطح تمامی pdbها، کافیست پارامتر pdb_lockdown را در سطح cdb تنظیم کرد.