一 密碼長度和復雜度
Oracle 數據庫通過?PASSWORD_VERIFY_FUNCTION?來控制密碼復雜度。
1.1 查看當前的密碼復雜度設置
SELECT?*?FROM?dba_profiles?WHERE?resource_name ='PASSWORD_VERIFY_FUNCTION';
LIMIT表示分配給該?PROFILE?的密碼驗證函數名稱。如果為?NULL,表示未設置密碼驗證函數。
上面輸出說明DEFAULT這個配置文件沒有配置密碼長度和復雜度驗證,ORA_STIG_PROFILE配置了ORA12C_STIG_VERIFY_FUNCTION這個密碼長度和復雜度驗證函數。
ORA12C_STIG_VERIFY_FUNCTION?是 Oracle 數據庫 12c 中提供的一種密碼驗證函數,用于實施符合安全技術實施指南(STIG)的密碼策略。
ORA12C_STIG_VERIFY_FUNCTION要求長度至少15,至少一個大寫字母,一個小寫字母,一個特殊字符。
#驗證
當創建用戶的時候,沒指定profile,則使用默認的default,此時可以創建弱口令賬號:
create user baidd_test identified by 123456;
grant connect,resource to baidd_test;
當指定有密碼驗證函數的配置文件時,無法創建弱口令賬號:
create user baidd_test2 ?identified by 123456 profile ORA_STIG_PROFILE;
#查看用戶使用的是哪個配置文件
SQL>??select username,profile from dba_users
USERNAME ? PROFILE
---------- ------------------------------
SYS ? ? ? ?DEFAULT
SYSTEM ? ? DEFAULT
……
1.2 設置密碼復雜度
#將default配置文件綁定密碼復雜度函數
語法:
ALTER PROFILE your_profile_name LIMIT PASSWORD_VERIFY_FUNCTION 密碼復雜度函數;
這里是:
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ORA12C_STIG_VERIFY_FUNCTION;
這個修改只對新建的用戶生效,不影響已建的弱口令賬號的正常使用,但若修改老用戶的密碼,也需要滿足密碼復雜度:
/*
假如要還原回去,則這樣設置:
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;
*/
二 密碼有效期
密碼有效期通過?PASSWORD_LIFE_TIME?參數控制,可以通過以下查詢查看:
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name = 'PASSWORD_LIFE_TIME';
LIMIT?列:顯示密碼的有效期(以天為單位)。UNLIMITED?表示密碼永不過期。
三 最大嘗試登錄次數
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name = 'FAILED_LOGIN_ATTEMPTS';
LIMIT?列:顯示允許的最大失敗登錄次數。
四 新舊密碼重復度
SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name IN ('PASSWORD_REUSE_MAX', 'PASSWORD_REUSE_TIME');
PASSWORD_REUSE_MAX:表示密碼在多少次更改后可以被重復使用。
PASSWORD_REUSE_TIME:表示密碼在多少天后可以被重復使用。
#修改示例
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 10;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME 365;
/*
假如要還原回去,則這樣修改:
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX UNLIMITED;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME UNLIMITED;
*/
五 鎖定次數,鎖定時間
鎖定次數:由 FAILED_LOGIN_ATTEMPTS 參數控制,表示用戶連續失敗登錄多少次后會被鎖定。
鎖定時間:通過 PASSWORD_LOCK_TIME 參數控制。
select * FROM dba_profiles WHERE resource_name IN ('FAILED_LOGIN_ATTEMPTS','PASSWORD_LOCK_TIME');