首先了解下下面幾個參數大致是做什么的
SQL> select * from dba_profiles;
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- -----------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED -----多少秒連續不活動的話系統自己主動斷開連接
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3 -- 密碼出錯次數(超過后賬號將鎖定)
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180 -- 密碼有效期(天)
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED -- 密碼不能重新用的天數
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED -- 密碼重用之前修改的最少次數
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL --密碼復雜度策略
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1 -- 超過了1天后,帳號自動解鎖
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7 -- 密碼到期提前7天提醒
已選擇16行。
一、修改密碼過期時間
1、查看當前open用戶
select username,account_status,expiry_date,profile from dba_users;
2、查看目前的密碼過期策略
select * from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
3、修改密碼過期策略
alter profile default limit password_life_time unlimited;
4、過期的賬戶,重置密碼后期不會再過期
$sqlplus / as sysdba
alter user smsc identified by <原來的密碼> ----不用換新密碼
密碼過期提前多少天提示設置
alter profile default limit PASSWORD_GRACE_TIME 7
ORA-28002: the password will expire within 7 days
5.賬戶過期,必須要用戶更改密碼, 賬戶才能重新使用。
ORA-28001:the password has expired
但有些時候, 因為各種原因, 我們並不知道原密碼的明文是什么,但很多時候又不能修改已有密碼,好在可以用原密碼來更改密碼。
在11G及之后的版本中,dba_users.password已經不再顯示用戶的密碼:
SQL> select username,ACCOUNT_STATUS from dba_users where username in ('SYSTEM','SCOTT');
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT EXPIRED
SYSTEM OPEN
SQL> select password from dba_users where username in ('SYSTEM','SCOTT');
PASSWORD
SQL> select user#,name,password,astatus from user$ where name in ('SYSTEM','SCOTT');
USER# NAME PASSWORD ASTATUS
---------- ------------------------------ ------------------------------ ----------
83 SCOTT F894844C34402B67 1
5 SYSTEM 2D594E86F93B17A1 0
SQL> alter user scott identified by values 'F894844C34402B67';
User altered.
SQL> select user#,name,password,astatus from user$ where name in ('SYSTEM','SCOTT');
USER# NAME PASSWORD ASTATUS
---------- ------------------------------ ------------------------------ ----------
83 SCOTT F894844C34402B67 0
5 SYSTEM 2D594E86F93B17A1 0
其實也可以直接修改表user$的字段ASTATUS為0,這樣用戶賬號就變成open狀態了。
ASTATUS對應的值的含義可以同過user_astatus_map查看
SQL> select * from user_astatus_map;

二、修改密碼錯誤次數
select * from dba_profiles s where s.profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS';

SQL>alter profile default limit failed_login_attempts 20; //修改為20次
三、添加profile文件並分配用戶
create profile profile名字 limit FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LIFE_TIME 180 PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_VERIFY_FUNCTION null PASSWORD_LOCK_TIME 1 PASSWORD_GRACE_TIME 30;
alter user 用戶名 profile profile名字;
密碼復雜度策略 詳見https://www.cnblogs.com/zhm1985/articles/13355814.html
