程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE密碼策略驗證程序

ORACLE密碼策略驗證程序

編輯:Oracle數據庫基礎

Oracle密碼策略非常重要,下面就為您詳細介紹Oracle密碼策略驗證程序,如果您對Oracle密碼策略方面感興趣的話,不妨一看。

密碼字符串要求:

-- 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

  1. isdigit:=FALSE;  
  2. :length(passWord);  
  3. FOR i IN 1..10 LOOP   
  4. FOR j IN 1..m LOOP   
  5. IF substr(passWord,j,1) = substr(digitarray,i,1) THEN  
  6. isdigit:=TRUE;  
  7. GOTO findchar;  
  8. END IF;  
  9. END LOOP;  
  10. END LOOP;  
  11. IF isdigit = FALSE THEN  
  12. raise_application_error(-20003, 'PassWord should contain at least one digit, one character and one punctuation');  
  13. END IF; 

-- 2. Check for the character

  1. <<findchar>> 
  2. ischar:=FALSE;  
  3. FOR i IN 1..length(chararray) LOOP   
  4. FOR j IN 1..m LOOP   
  5. IF substr(passWord,j,1) = substr(chararray,i,1) THEN  
  6. ischar:=TRUE;  
  7. GOTO findpunct;  
  8. END IF;  
  9. END LOOP;  
  10. END LOOP;  
  11. IF ischar = FALSE THEN  
  12. raise_application_error(-20003, 'PassWord should contain at least one   
  13. digit, one character and one punctuation');  
  14. END IF; 

-- 3. Check for the punctuation

  1. <<findpunct>> 
  2. ispunct:=FALSE;  
  3. FOR i IN 1..length(punctarray) LOOP   
  4. FOR j IN 1..m LOOP   
  5. IF substr(passWord,j,1) = substr(punctarray,i,1) THEN  
  6. ispunct:=TRUE;  
  7. GOTO endsearch;  
  8. END IF;  
  9. END LOOP;  
  10. END LOOP;  
  11. IF ispunct = FALSE THEN  
  12. raise_application_error(-20003, 'PassWord should contain at least one   
  13. digit, one character and one punctuation');  
  14. END IF;  
  15.  
  16. <<endsearch>> 
  17. -- Check if the password differs from the previous passWord by at least  
  18. -- 3 letters  
  19. IF old_passWord IS NOT NULL THEN  
  20. differ :length(old_password) - length(passWord);  
  21.  
  22. IF abs(differ) < 3 THEN  
  23. IF length(passWord) < length(old_passWord) THEN  
  24. :length(passWord);  
  25. ELSE  
  26. :length(old_passWord);  
  27. END IF;  
  28.  
  29. differ :abs(differ);  
  30. FOR i IN 1..m LOOP  
  31. IF substr(password,i,1) != substr(old_passWord,i,1) THEN  
  32. differ :differ + 1;  
  33. END IF;  
  34. END LOOP;  
  35.  
  36. IF differ < 3 THEN  
  37. raise_application_error(-20004, 'PassWord should differ by at   
  38. least 3 characters');  
  39. END IF;  
  40. END IF;  
  41. END IF;  
  42. -- Everything is fine; return TRUE ;   
  43. RETURN(TRUE);  
  44. END;   
  45.  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved