Mandatory Profile در اوراکل 21c

همانطور که می دانید از طریق پروفایل می توان برای هر کاربر در دو سطح مصرف منابع و password complexity محدودیتهایی را اعمال کرد. پروفایلها در سطح کاربر قابل تنظیم هستند و هر کاربر می تواند تنها یک پرفایل داشته باشد.

در اوراکل 21c نوع جدیدی از پروفایل تحت عنوان Mandatory Profile ارائه شد که در سطح root container قابل ایجاد است و می توان این دسته از پروفایلها را برای یک یا چند pdb تنظیم کرد که در این صورت، پالیسی مربوط به این پروفایل، برای همه کاربران موجود در آن pdb اعمال خواهد شد.

Mandatory Profile صرفا قرار است در زمینه تنظیم پسورد برای کاربران محدودیت ایجاد کند به این صورت که مثلا پسورد کاربر حداقل n کارکتر داشته باشد. این قبیل محدودیتها از طریق ایجاد یک FUNCTION و تنظیم پارامتر PASSWORD_VERIFY_FUNCTION(در پروفایل) قابل اعمال هستند.

مثال: در این مثال با ساخت تابع func_pass_limit  و استفاده از ان در یک Mandatory Profile، قصد داریم محدودیتی را ایجاد کنیم که بر اساس آن، پسورد کاربران در pdb5 و pdb8 حداقل 5 کاراکتر داشته باشند:

ایجاد تابع:

SQL> CREATE OR REPLACE FUNCTION func_pass_limit(username     VARCHAR2,password     VARCHAR2,old_password VARCHAR2)

  RETURN BOOLEAN IS

BEGIN

  IF ora_complexity_check(password, chars => 5) THEN

    return(true);

  END IF;

  RETURN(false);

END;

/

Function created.

ایجاد Mandatory Profile:

SQL> CREATE MANDATORY PROFILE c##EJBARI_PROF LIMIT PASSWORD_VERIFY_FUNCTION func_pass_limit CONTAINER = ALL;

Profile created

تنظیم Mandatory Profile برای یک pdb با کمک پارامتر mandatory_user_profile انجام می شود. این پارامتر در سطح pdb قابل تنظیم است.

در ادامه Mandatory Profile ایجاد شده را برای pdb5 و pdb8 تنظیم می کنیم:

SQL> show pdbs

    CON_ID CON_NAME            OPEN MODE  RESTRICTED

———- ————-               ———- ———-

         2 PDB$SEED                   READ ONLY  NO

         3 PDB1                           READ WRITE NO

         4 PDB5                           READ WRITE NO

         6 PDB8                           READ WRITE NO

SQL> alter session set container=PDB5;

Session altered.

SQL> show parameter mandatory_user_profile;

NAME                                 TYPE        VALUE

———————————— ———– ——————————

mandatory_user_profile               string

SQL> alter system set mandatory_user_profile=c##EJBARI_PROF;

System altered.

SQL> alter session set container=PDB8;

Session altered.

SQL> show parameter mandatory_user_profile;

NAME                                 TYPE        VALUE

———————————— ———– ——————————

mandatory_user_profile               string

SQL> alter system set mandatory_user_profile=c##EJBARI_PROF;

System altered.

بعد از تنظیم این پارامتر، پسورد کاربر usef را در pdb5 و pdb1 تغییر خواهیم داد:

SQL> alter session set container=PDB5;

Session altered.

SQL> create user vahid identified by a;

ORA-28219: password verification failed for mandatory profile

ORA-20000: password length less than 5 characters

SQL> create user vahid identified by a1234;

User created.

SQL> create user vahid identified by a;

User created.

اگر در local profileها سیاستی را در مورد حداقل تعداد کارکترهای پسورد اعمال کرده باشیم، کماکان پسورد انتخاب شده توسط کاربر، باید شرایط تعیین شده در Mandatory Profile را هم دارا باشد.

برای مثال، اگر(در ادامه سناریو قبلی) در pdb5، برای local profileی حداقل password length برابر با 3 در نظر گرفته شود، باز هم Mandatory Profile مانع از ایجاد کاربر خواهد شد:

SQL> CREATE OR REPLACE FUNCTION local_func(username     VARCHAR2,password     VARCHAR2,old_password VARCHAR2)

  RETURN BOOLEAN IS

BEGIN

  IF ora_complexity_check(password, chars => 3) THEN

    return(true);

  END IF;

  RETURN(false);

END;

/

Function created.

SQL> create profile local_prf limit PASSWORD_VERIFY_FUNCTION local_func;

Profile created

SQL> alter user vahid profile local_prf;

User altered

SQL> alter user vahid identified by abc;

ORA-28219: password verification failed for mandatory profile

ORA-20000: password length less than 5 characters

البته اگر حداقل password length در local profile به عدد بیشتری تنظیم شود، اولویت با local profile خواهد بود:

SQL>CREATE OR REPLACE FUNCTION local_func(username     VARCHAR2,password     VARCHAR2,old_password VARCHAR2)

  RETURN BOOLEAN IS

BEGIN

  IF ora_complexity_check(password, chars => 7) THEN

    return(true);

  END IF;

  RETURN(false);

END;

/

Function created.

SQL> alter user vahid identified by abcde;

ORA-28003: password verification for the specified password failed

ORA-20000: password length less than 7 characters

SQL> alter user vahid identified by abcdefg;

User altered

در پروفایلهای از نوع Mandatory، پارامتر PASSWORD_VERIFY_FUNCTION تنها پارامتر قابل استفاده خواهد بود و مابقی پارامترهای Mandatory Profile یا قابل تنظیم نیستند و یا در صورت تنظیم، محدودیتی برای کاربران ایجاد نمی کنند:

SQL> alter profile c##mand limit PASSWORD_LIFE_TIME 1;

ORA-02387: invalid password parameter for mandatory profile

برای شناسایی Mandatory Profileها می توان به ویوی dba_profiles رجوع کرد:

SQL> select distinct profile from dba_profiles where mandatory=’YES’;

PROFILE

—————

C##EJBARI_PROF

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.