密碼複雜度設定函式
@?/rdbms/admin/utlpwdmg.sql
這裡分享一個賬戶密碼複雜度設定函式,這個是作為資料庫使用者管理概要檔案的一部分。
CREATE OR REPLACE FUNCTION verify_function_11G
(username varchar2,
password varchar2,
old_password varchar2)
RETURN boolean IS
n boolean;
m integer;
differ integer;
isdigit boolean;
ischar boolean;
ispunct boolean;
db_name varchar2(40);
digitarray varchar2(20);
punctarray varchar2(25);
chararray varchar2(52);
i_char varchar2(10);
simple_password varchar2(10);
reverse_user varchar2(32);
BEGIN
digitarray:= '0123456789';
chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-- Check for the minimum length of the password
IF length(password) < 8 THEN
raise_application_error(-20001, 'Password length less than 8');
END IF;
-- Check if the password is same as the username or username(1-100)
IF NLS_LOWER(password) = NLS_LOWER(username) THEN
raise_application_error(-20002, 'Password same as or similar to user');
END IF;
FOR i IN 1..100 LOOP
i_char := to_char(i);
if NLS_LOWER(username)|| i_char = NLS_LOWER(password) THEN
raise_application_error(-20005, 'Password same as or similar to user name ');
END IF;
END LOOP;
-- Check if the password is same as the username reversed
FOR i in REVERSE 1..length(username) LOOP
reverse_user := reverse_user || substr(username, i, 1);
END LOOP;
IF NLS_LOWER(password) = NLS_LOWER(reverse_user) THEN
raise_application_error(-20003, 'Password same as username reversed');
END IF;
-- Check if the password is the same as server name and or servername(1-100)
select name into db_name from sys.v$database;
if NLS_LOWER(db_name) = NLS_LOWER(password) THEN
raise_application_error(-20004, 'Password same as or similar to server name');
END IF;
FOR i IN 1..100 LOOP
i_char := to_char(i);
if NLS_LOWER(db_name)|| i_char = NLS_LOWER(password) THEN
raise_application_error(-20005, 'Password same as or similar to server name ');
END IF;
END LOOP;
-- 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 ('welcome1', 'database1', 'account1', 'user1234', 'password1', 'oracle123', 'computer1', 'abcdefg1', 'change_on_install') THEN
raise_application_error(-20006, 'Password too simple');
END IF;
-- Check if the password is the same as oracle (1-100)
simple_password := 'oracle';
FOR i IN 1..100 LOOP
i_char := to_char(i);
if simple_password || i_char = NLS_LOWER(password) THEN
raise_application_error(-20007, 'Password too simple ');
END IF;
END LOOP;
-- Check if the password contains at least one letter, one digit
-- 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(-20008, 'Password must contain at least one digit, one character');
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 endsearch;
END IF;
END LOOP;
END LOOP;
IF ischar = FALSE THEN
raise_application_error(-20009, 'Password must contain at least one \
digit, and one character');
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);
differ := abs(differ);
IF differ < 3 THEN
IF length(password) < length(old_password) THEN
m := length(password);
ELSE
m := length(old_password);
END IF;
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(-20011, 'Password should differ from the \
old password by at least 3 characters');
END IF;
END IF;
END IF;
-- Everything is fine; return TRUE ;
RETURN(TRUE);
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2128283/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 如何設定密碼複雜度?Linux密碼複雜度
- Oracle EBS 資料庫密碼複雜度設定Oracle資料庫密碼複雜度
- Profile設定高標準密碼複雜度的方法密碼複雜度
- 分享Profile設定高標準密碼複雜度的方法密碼複雜度
- 不要再強迫我設定複雜密碼密碼
- Javascript校驗密碼複雜度的正規表示式JavaScript密碼複雜度
- MySQL 5.7 初始密碼和密碼複雜度問題MySql密碼複雜度
- Linux 生成複雜密碼並且檢查密碼強度Linux密碼
- 使用PASSWORD_VERIFY_FUNCTION設定使用者密碼複雜度Function密碼複雜度
- 【PROFILE】Oracle11g密碼複雜度說明Oracle密碼複雜度
- 密碼的複雜化密碼
- 如何在 Linux 生成複雜密碼並且檢查密碼強度Linux密碼
- 淺析程式碼圈複雜度及認知複雜度複雜度
- PHP陣列函式的時間複雜度清單PHP陣列函式時間複雜度
- 複雜密碼生成工具apg密碼
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- 11gR2 Database使用者密碼複雜度驗證Database密碼複雜度
- 【演算法】設計包含 min函式的棧,時間複雜度都是 O(1)演算法函式時間複雜度
- 函式指標複雜的例子函式指標
- 降低程式碼的圈複雜度——複雜程式碼的解決之道複雜度
- 用程式碼複雜度分析風險複雜度
- ruby指令碼,隨機生成複雜密碼指令碼隨機密碼
- 軟體設計的複雜度複雜度
- Linux設定口令複雜度和口令定期更換策略Linux複雜度
- 複雜度分析複雜度
- oracle 開啟複雜密碼驗證Oracle密碼
- 複雜度分析的套路及常見的複雜度複雜度
- 時間複雜度O(n)和空間複雜度時間複雜度
- 時間複雜度和空間複雜度 順序時間複雜度
- 生成密碼函式密碼函式
- mysql設定複雜密碼中含$特殊符號導致無法命令列登入MySql密碼符號命令列
- Solr複雜查詢一:函式查詢Solr函式
- 現代密碼學之加密雜湊函式與訊息認證碼密碼學加密函式
- 關於計算時間複雜度和空間複雜度時間複雜度
- 【資料結構】-時間複雜度和空間複雜度資料結構時間複雜度
- 正規表示式時間複雜度O(n)時間複雜度