در اوراکل نسخه 21c(و همچنین بعدا در اوراکل 19.12)، قابلیتی با عنوان “Gradual Database Password Rollover” ارائه شد که با تنظیم پسورد جدید برای یک کاربر، پسورد قبلی برای مدت زمان محدودی معتبر باقی می ماند که در این شرایط، یک کاربر هر چند برای مدت زمان کوتاهی، دو پسورد خواهد داشت.
کاربرد!
با استفاده از این ویژگی می توان عملیات تغییر پسورد یوزری که application از طریق آن به دیتابیس وصل می شود را بهتر مدیریت کرد چرا که در این شیوه، ابتدا پسورد جدید برای کاربر تنظیم شده و در زمان مناسب پسورد جدید کاربر در applicationها اعمال خواهد شد.
این ویژگی سبب خواهد شد تا در applicationهایی که برای تغییر پسورد نیازی به restart شدن ندارند، downtimeی هم نداشته باشیم(در زمان تغییر پسورد کاربر).
پیاده سازی و تنظیمات
برای استفاده از این ویژگی، صرفا باید پارامتر PASSWORD_ROLLOVER_TIME را در پروفایلی که کاربر مورد نظر عضو آن هست به مقداری بزرگتر از صفر تنظیم کرد. PASSWORD_ROLLOVER_TIME مشخص می کند که در صورت تغییر پسورد کاربر، پسورد قبلی برای چه مدت زمانی معتبر باشد. حداقل مقدار این پارامتر می تواند یک ساعت است(1/24) و حداکثر زمان قابل تنظیم هم با فرمول زیر مشخص می شود:
Max(PASSWORD_ROLLOVER_TIME)=min(PASSWORD_LIFE_TIME,PASSWORD_GRACE_TIME,60 days)
در ادامه با ارائه سناریو، نکاتی دیگری را در مورد این قابلیت جدید اوراکل ارائه خواهیم کرد.
شرایط زیر را در نظر بگیرید:
SQL> create profile prf1 limit PASSWORD_ROLLOVER_TIME 5;
Profile created.
SQL> create user usef identified by p1 profile prf1;
User created.
SQL> grant create session to usef;
Grant succeeded.
SQL> select ACCOUNT_STATUS from dba_users where username=’USEF’;
ACCOUNT_STATUS
——————————–
OPEN
SQL> alter user usef identified by p2;
User altered.
SQL> select ACCOUNT_STATUS from dba_users where username=’USEF’;
ACCOUNT_STATUS
——————————–
OPEN & IN ROLLOVER
در این شرایط کاربر usef دو پسورد p1 و p2 خواهد داشت و پسورد p1 که اصطلاحا rollover password هم نامیده می شود، به مدت پنج روز معتبر خواهد بود:
SQL> conn usef/p1@pdb1
Connected.
SQL> conn usef/p2@pdb1
Connected.
اگر قبل از گذشت مدت زمان پنج روز، پسورد کاربر usef را تغییر دهیم، کماکان rollover password که در مثال ما عبارت “p1” است، معتبر خواهد بود و پسورد جدید جایگزین پسورد p2 می شود:
SQL> alter user usef identified by p3;
User altered.
SQL> conn usef/p1@pdb1
Connected.
SQL> conn usef/p3@pdb1
Connected.
SQL> conn usef/p2@pdb1
ORA-01017: invalid username/password; logon denied
پس از 5 روز خواهیم دید که دیگر امکان استفاده از پسورد p1 وجود ندارد:
[root@oLinux7 ~]# date
Mon Aug 23 17:19:51 EDT 2021
[root@oLinux7 ~]# date -s “Mon Aug 29 17:19:00”
Sun Aug 29 17:19:00 EDT 2021
SQL> conn usef/p2@pdb1
Connected.
SQL> conn usef/p1@pdb1
ORA-01017: invalid username/password; logon denied
و وضعیت یوزر usef از OPEN & IN ROLLOVER به OPEN تغییر خواهد کرد:
SQL> select ACCOUNT_STATUS from dba_users where username=’USEF’;
ACCOUNT_STATUS
——————————–
OPEN
اگر تصمیم دارید قبل از گذراندن مدت زمان تعیین شده برای پارامتر PASSWORD_ROLLOVER_TIME، پسورد rollover کاربری را نامعتبر کنید، می توانید از دستور زیر استفاده کنید:
SQL> select ACCOUNT_STATUS from dba_users where username=’USEF’;
ACCOUNT_STATUS
——————————–
OPEN & IN ROLLOVER
SQL> alter user usef expire password rollover period;
User altered.
SQL> select ACCOUNT_STATUS from dba_users where username=’USEF’;
ACCOUNT_STATUS
——————————–
OPEN