Oracle通過PROFILE中的PASSWORD_REUSE_TIME和PASSWORD_REUSE_MAX來確定密碼是否可以重用以及密碼重用的限制
但是經過測試發現Oracle的ADMINISTRATOR GUIDE裡面的描述是錯誤的我查閱了一下METALINKMETALINK上的一篇文章雖然對這兩個參數進行了比較詳細的說明但是仍然有一部分描述是錯誤
PASSWORD_REUSE_TIME是重用密碼的最小時間間隔單位是天可以給出整數或分數如/表示分鐘(出於效率的考慮oracle不會每分鐘都去進行檢查一般來說有分鐘左右的誤差因此如果這個數小於/則沒有多大的意義)
PASSWORD_REUSE_MAX是重用密碼前更換密碼的最小次數這兩項本身沒有任何異議關鍵是兩項如何配合使用可以分為種情況進行描述
一PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME都為UNLIMITED
這時密碼可以任意重用沒有限制這也是DEFAULT profile的默認值當這兩項都為UNLIMITED時認為這兩個參數沒有使用因此密碼重用沒有任何限制
SQL> create profile prof_test limit password_reuse_max unlimited
password_reuse_time unlimited;
配置文件已創建
SQL> create user test identified by test profile prof_test;
用戶已創建
SQL> alter user test identified by test;
用戶已更改
SQL> alter user test identified by test;
用戶已更改
二PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME中有一個為UNLIMITED另一個為其他值
這個時候你的密碼將永遠無法重用
看看administrator guide上是怎麼說的
Use the CREATE PROFILE statement to specify a time interval during which users
cannot reuse a password In the following statement a profile is defined where
the PASSWORD_REUSE_TIME clause specifies that the user cannot reuse the
password
for days
CREATE PROFILE prof LIMIT
PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAX UNLIMITED;
In the next statement the PASSWORD_REUSE_MAX clause specifies that the number
of password changes the user must make before the current password can be used
again is three
CREATE PROFILE prof LIMIT
PASSWORD_REUSE_MAX
PASSWORD_REUSE_TIME UNLIMITED;
Note: If you specify PASSWORD_REUSE_TIME or PASSWORD_REUSE_MAX you must set
the other to UNLIMITED or not specify it at all
文檔告訴我們只使用其中一個把另外一個設置為UNLIMITED但是這是不正確的這樣會導致你的密碼永遠無法重用
SQL> alter profile prof_test limit password_reuse_max ;
配置文件已更改
SQL> select resource_name limit from dba_profiles
where profile = PROF_TEST and resource_type = PASSWORD;
RESOURCE_NAMELIMIT
FAILED_LOGIN_ATTEMPTSDEFAULT
PASSWORD_LIFE_TIMEDEFAULT
PASSWORD_REUSE_TIMEUNLIMITED
PASSWORD_REUSE_MAX
PASSWORD_VERIFY_FUNCTIONDEFAULT
PASSWORD_LOCK_TIMEDEFAULT
PASSWORD_GRACE_TIMEDEFAULT
已選擇行
SQL> alter user test identified by test;
用戶已更改
SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
SQL> alter user test identified by t;
用戶已更改
SQL> alter user test identified by t;
用戶已更改
SQL> alter user test identified by t;
用戶已更改
SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
修改profile後只對test用戶的後續操作有效第一次可以修改密碼為test是因為oracle沒有記錄初始密碼而第二次修改就會失敗因為密碼已經不能重用了
根據文檔我們只需要修改密碼三次就可以重用但是測試的結果確是密碼無法在重用
SQL> alter profile prof_test limit password_reuse_max unlimited;
配置文件已更改
SQL> alter user test identified by test;
用戶已更改
SQL> alter profile prof_test limit password_reuse_time /;
配置文件已更改
SQL> select resource_name limit from dba_profiles
where profile = PROF_TEST and resource_type = PASSWORD;
RESOURCE_NAMELIMIT
FAILED_LOGIN_ATTEMPTSDEFAULT
PASSWORD_LIFE_TIMEDEFAULT
PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAXUNLIMITED
PASSWORD_VERIFY_FUNCTIONDEFAULT
PASSWORD_LOCK_TIMEDEFAULT
PASSWORD_GRACE_TIMEDEFAULT
已選擇行
SQL> set time on
:: SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
:: SQL>
:: SQL>
:: SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
:: SQL>
:: SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
:: SQL> set time off
修改PASSWORD_REUSE_TIME為/也就是說大概分鐘的時間考慮的oracle的誤差我們在分鐘和分鐘後分別進行測試結果發現密碼仍然無法重用
三PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME都不為UNLIMITED
這時只需滿足任意一個條件就可以重用密碼
Metalink上的文章在這裡描述有誤密碼重用不需要同時滿足兩個條件只要滿足一個既可
SQL> alter profile prof_test limit password_reuse_time unlimited;
配置文件已更改
SQL> alter user test identified by test;
用戶已更改
SQL> alter profile prof_test limit
password_reuse_max password_reuse_time /;
配置文件已更改
SQL> set time on
:: SQL> alter user test identified by test;
用戶已更改
:: SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
:: SQL> alter user test identified by t;
用戶已更改
:: SQL> alter user test identified by t;
用戶已更改
:: SQL> alter user test identified by t;
用戶已更改
:: SQL> alter user test identified by test;
用戶已更改
:: SQL>
:: SQL> alter user test identified by test;
alter user test identified by test
*
ERROR 位於第 行:
ORA: 無法重新使用口令
:: SQL>
:: SQL>
:: SQL> alter user test identified by test;
用戶已更改
第一次重用test密碼才過了分鐘左右而在第二次重用test密碼之前並沒有使用過其他密碼可見只需滿足PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME中的任意一個條件就可以
From:http://tw.wingwit.com/Article/program/Oracle/201311/18309.html