مقدمه

یکی از مواردی که منجر به 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>