浩晨众云网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
ORACLE密码策略非常重要,下面就为您详细介绍ORACLE密码策略验证程序,如果您对ORACLE密码策略方面感兴趣的话,不妨一看。

成都创新互联致力于互联网网站建设与网站营销,提供成都网站设计、成都做网站、网站开发、seo优化、网站排名、互联网营销、小程序制作、公众号商城、等建站开发,成都创新互联网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。
密码字符串要求:
-- Check if the password is same as the username
 -- Check for the minimum length of the password
 -- Check if the password contains at least one letter, one digit and one
 -- Check if the password differs from the previous password by at least
CREATE OR REPLACE FUNCTION SYS.verify_function
 (username varchar2,
 password varchar2,
 old_password varchar2)
 RETURN boolean IS 
 n boolean;
 m integer;
 differ integer;
 isdigit boolean;
 ischar boolean;
 ispunct boolean;
 digitarray varchar2(20);
 punctarray varchar2(25);
 chararray varchar2(52);
BEGIN 
 digitarray:= '0123456789';
 chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 punctarray:='!"#$%&()``*+,-/:;<=>?_';
-- Check if the password is same as the username
 IF NLS_LOWER(password) = NLS_LOWER(username) THEN
 raise_application_error(-20001, 'Password same as or similar to user');
 END IF;
-- Check for the minimum length of the password
 IF length(password) < 8 THEN
 raise_application_error(-20002, 'Password length less than 8');
 END IF;
-- Check if the password is too simple. A dictionary of words may be
 -- maintained and a check may be made so as not to allow the words
 -- that are too simple for the password.
 IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd') THEN
 raise_application_error(-20002, 'Password too simple');
 END IF;
-- Check if the password contains at least one letter, one digit and one
 -- punctuation mark.
 -- 1. Check for the digit
- isdigit:=FALSE;
 - m := length(password);
 - FOR i IN 1..10 LOOP
 - FOR j IN 1..m LOOP
 - IF substr(password,j,1) = substr(digitarray,i,1) THEN
 - isdigit:=TRUE;
 - GOTO findchar;
 - END IF;
 - END LOOP;
 - END LOOP;
 - IF isdigit = FALSE THEN
 - raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation');
 - END IF;
 
-- 2. Check for the character
- <
 > - ischar:=FALSE;
 - FOR i IN 1..length(chararray) LOOP
 - FOR j IN 1..m LOOP
 - IF substr(password,j,1) = substr(chararray,i,1) THEN
 - ischar:=TRUE;
 - GOTO findpunct;
 - END IF;
 - END LOOP;
 - END LOOP;
 - IF ischar = FALSE THEN
 - raise_application_error(-20003, 'Password should contain at least one
 - digit, one character and one punctuation');
 - END IF;
 
-- 3. Check for the punctuation
- <
 > - ispunct:=FALSE;
 - FOR i IN 1..length(punctarray) LOOP
 - FOR j IN 1..m LOOP
 - IF substr(password,j,1) = substr(punctarray,i,1) THEN
 - ispunct:=TRUE;
 - GOTO endsearch;
 - END IF;
 - END LOOP;
 - END LOOP;
 - IF ispunct = FALSE THEN
 - raise_application_error(-20003, 'Password should contain at least one
 - digit, one character and one punctuation');
 - END IF;
 - <
 > - -- Check if the password differs from the previous password by at least
 - -- 3 letters
 - IF old_password IS NOT NULL THEN
 - differ := length(old_password) - length(password);
 - IF abs(differ) < 3 THEN
 - IF length(password) < length(old_password) THEN
 - m := length(password);
 - ELSE
 - m := length(old_password);
 - END IF;
 - differ := abs(differ);
 - FOR i IN 1..m LOOP
 - IF substr(password,i,1) != substr(old_password,i,1) THEN
 - differ := differ + 1;
 - END IF;
 - END LOOP;
 - IF differ < 3 THEN
 - raise_application_error(-20004, 'Password should differ by at
 - least 3 characters');
 - END IF;
 - END IF;
 - END IF;
 - -- Everything is fine; return TRUE ;
 - RETURN(TRUE);
 - END;