مقدمه
یکی از مواردی که منجر به Downtime در سطح سامانه ها می شود، منقضی شدن کلمه عبور، کاربر سامانه در سطح پایگاه داده می باشد. مخصوصا اگر تعداد سامانه ها زیاد باشند اعمال این تغییرات زمان بر و پر ریسک خواهد بود. در صورتی که بخواهیم قابلیت منقضی شدن کلمه عبور را متوقف کرد، مشکلات امنیتی به وجود خواهد آمد.
اوراکل در نسخه 21c قابلیتی ایجاد کرده که به وسیله آن مشکل فوق برطرف می گردد. این قابلیت از نسخه 19.12c به بعد نیز اضافه گردیده.
gradual password rollover time قابلیت این را می دهد که در بازه زمانی یاد شده هر دو کلمه عبور قدیم و جدید قابلیت استفاده داشته باشند و در این بازه به مرور تغییرات را در سطح سامانه ها برای ایجاد ارتباط جدید با پایگاه داده را اعمال کرد. این قابلیت با استفاده از پارامتر PASSWORD_ROLLOVER_TIME در پروفایل کاربران، امکان پذیر می باشد.
آماده کردن محیط آزمایش و بررسی:
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
–drop user testuser1 cascade;
create user testuser1 identified by testuser1 quota unlimited on users;
grant connect, resource to testuser1;
ساخت پروفایل با تنظیم PASSWORD_ROLLOVER_TIME:
یک پروفایل با 1 روز password_rollover_time
— drop profile pw_rollover_time_prof;
create profile pw_rollover_time_prof limit
password_rollover_time 1;
alter user testuser1 profile pw_rollover_time_prof;
می توان پروفایل gradual password rollover time به میزان 1.5 روز تغییر داد.
alter profile pw_rollover_time_prof limit
password_rollover_time 1.5;
این پارامتر می تواند حداقل مقدار 1 ساعت (1/24) و حداکثر 60 روز را داشته باشد.
در ادامه این امکان را در عمل مورد بررسی قرار می دهیم
conn testuser1/testuser1@//localhost:1521/pdb1
alter user testuser1 identified by newpasswd1;
conn testuser1/testuser1@//localhost:1521/pdb1
Connected.
SQL>
conn testuser1/newpasswd1@//localhost:1521/pdb1
Connected.
SQL>
همانطور که در دستورات فوق مشاهده می کنید، امکان استفاده از هر دو پسورد به مدت 1.5 روز وجود دارد.
با استفاده از view DBA_USERS و مقدار ستون ACCOUNT_STATUS می توان متوجه شد که در حال حاضر کاربر در دوره زمانی rollover قرار دارد.
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
select account_status,
to_char(password_change_date, ‘dd-mon-yyyy hh24:mi:ss’) as password_change_date
from dba_users
where username = ‘TESTUSER1’;
ACCOUNT_STATUS PASSWORD_CHANGE_DATE
——————————– —————————–
OPEN & IN ROLLOVER 15-oct-2021 09:22:43
SQL>
در خصوص پروفایل می توان از دستور زیر استفاده کرد.
column resource_name format a25
column limit format a10
select resource_name,
limit
from dba_profiles
where profile = ‘PW_ROLLOVER_TIME_PROF’
and resource_name = ‘PASSWORD_ROLLOVER_TIME’;
RESOURCE_NAME LIMIT
————————- ———-
PASSWORD_ROLLOVER_TIME 1.5
SQL>
جهت غیر فعال کردن این قابلیت کافیه مقدار پارامتر را به 0 تغییر داد.
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
alter profile pw_rollover_time_prof limit
password_rollover_time 0;
conn testuser1/testuser1@//localhost:1521/pdb1
USER = testuser1
URL = jdbc:oracle:oci8:@//localhost:1521/pdb1
Error Message = no ocijdbc21 in java.library.path
USER = testuser1
URL = jdbc:oracle:thin:@//localhost:1521/pdb1
Error Message = ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL>