策略:
登录失败可以重试10次。
密码可用90天,90天必须更换。
在60天内密码不可以重用。
密码失效后,可宽限7天使用失效密码.
密码锁定1天。
用户名与密码不可以相同。
用户名与密码不可以相反。
密码的长度要超过8位。
密码中必须要有字符和数字。
以下必须以sysdba的身份执行:
CREATE OR REPLACE FUNCTION VERIFY_FUNCTION
(username varchar2,
password varchar2,
old_password varchar2)
RETURN boolean IS
V_LEN NUMBER;
V_CHAR_C NUMBER;
V_NUM_C NUMBER;
V_REVERSE VARCHAR2(200) := NULL;
BEGIN
--用户名与密码不可以相同
IF username = password THEN
RETURN(FALSE);
END IF;
--密码长度不可以少于8位
IF LENGTH(password) < 8 THEN
RETURN(FALSE);
END IF;
V_LEN := LENGTH(password);
FOR I IN 1..V_LEN LOOP
V_REVERSE := NVL(V_REVERSE,'')||SUBSTR(password,v_len-I+1,1);
IF SUBSTR(password,I,1)>='0' AND SUBSTR(password,I,1)<='9' THEN
V_NUM_C := NVL(V_NUM_C,0)+1;
END IF;
IF UPPER(SUBSTR(password,I,1))>='A' AND UPPER(SUBSTR(password,I,1))<='Z' THEN
V_CHAR_C := NVL(V_CHAR_C,0)+1;
END IF;
END LOOP;
--用户与密码不可以相反
IF username = v_reverse THEN
RETURN(FALSE);
END IF;
--密码必须要有数字和字母
IF NOT (NVL(V_CHAR_C,0)>0 AND NVL(V_NUM_C,0)>0) THEN
RETURN(FALSE);
END IF;
RETURN(TRUE);
END;
ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;[@more@]