در Oracle Database توابع از پیش تعریفشدهای برای اعمال محدودیت روی پیچیدگی رمز عبور ارایه شده که میتوانند در پروفایل کاربر مورد استفاده قرار گیرند.
جستجو و فعالسازی توابع از پیش تعریفشده
برای دیدن پروفایلها و توابع مربوط به بررسی رمز عبور:
select profile , resource_name , limit from dba_profiles where resource_name='PASSWORD_VERIFY_FUNCTION';
PROFILE RESOURCE_NAME LIMIT
------------------------------ -------------------------------- ---------------------------
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
ORA_STIG_PROFILE PASSWORD_VERIFY_FUNCTION ORA12C_STIG_VERIFY_FUNCTION
در صورتی که این موضوع بصورت پیش فرض وجود نداشت، می توانیم از دستور زیر در دیتابیس استفاده کنیم:
@?/rdbms/admin/utlpwdmg.sql
و بعد از اجرا بصورت زیر تغییر می یابد:
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION';
PROFILE RESOURCE_NAME LIMIT
------------------------------ -------------------------------- ---------------------------
DEFAULT PASSWORD_VERIFY_FUNCTION ORA12C_VERIFY_FUNCTION
ORA_STIG_PROFILE PASSWORD_VERIFY_FUNCTION ORA12C_STIG_VERIFY_FUNCTION
نمونه توابع از پیش تعریف Oracle
ORA12C_VERIFY_FUNCTION
-
حداقل 8 کاراکتر
-
داشتن حرف، عدد، علامت خاص
-
نباید شامل user name ، database name و "oracle" باشد
-
حداقل 3 کاراکتر تفاوت با رمز قبلی
ساخت توابع شخصی سازی شده
میتوانیم توابع را خودمان بسازیم تا شروط خاص را اعمال کنیم. نمونه:
CREATE OR REPLACE FUNCTION vahiddb_19c_verify_function (
username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2)
RETURN BOOLEAN IS
differ INTEGER;
lang VARCHAR2(512);
message VARCHAR2(512);
ret NUMBER;
BEGIN
lang := sys_context('userenv','lang');
lang := substr(lang, 1, instr(lang, '_') - 1);
IF NOT ora_complexity_check(password, chars => 12, uppercase => 1, lowercase => 1,
digit => 1, special => 1) THEN
RETURN FALSE;
END IF;
IF old_password IS NOT NULL THEN
differ := ora_string_distance(old_password, password);
IF differ < 8 THEN
ret := utl_lms.get_message(28211, 'RDBMS', 'ORA', lang, message);
raise_application_error(-20000, utl_lms.format_message(message, 'eight'));
END IF;
END IF;
RETURN TRUE;
END;
/
تست و اتصال به پروفایل
ایجاد یک پروفایل:
CREATE PROFILE app_profile LIMIT
PASSWORD_VERIFY_FUNCTION vahiddb_19c_verify_function
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 3;
سرانجام تست و مالک کردن پروفایل:
CREATE USER test IDENTIFIED BY test PROFILE app_profile;
خروجی:
ORA-28003: password verification for the specified password failed
ORA-20000: password length less than 12 bytes
که نشان میدهد فانکشن در حال کار و اعمال سیاست پیچیدگی رمز میباشد.