2017-04-01 54 views
1

需要創建一個驗證密碼的功能(超過5個字符,與上一個不同,它既不是「密碼」也不是「123456」) 我試過但我得到錯誤ORACLE SQL密碼功能

CREATE OR REPLACE FUNCTION my_verification_function (
    username VARCHAR2, 
    password VARCHAR2, 
    old_password VARCHAR2) 
RETURN BOOLEAN IS 
BEGIN 
    IF LENGTH(password) < 6 THEN RETURN FALSE; 
    ELSE IF (password = "password" OR password = '123' OR password = old_password) THEN RETURN FALSE         
    ELSE RETURN TRUE; 
    END IF; 
END my_verification_function;$ 
+1

'OR password ='??也沒有'如果'。有關詳細信息,請參閱手冊:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/controlstatements.htm#LNPLS391和「password」指的是列或變量。字符串常量需要放在單引號中。 –

+0

爲什麼在數據庫中需要直接在UI /前端級別完成此操作? – Spidey

回答

2
CREATE OR REPLACE FUNCTION my_verification_function (
    username VARCHAR2, 
    pass VARCHAR2, 
    old_password VARCHAR2) 
RETURN varchar2 IS 
BEGIN 
    IF LENGTH(pass) < 6 THEN RETURN 'FALSE'; 
    ELSIF (pass = 'password' OR pass = '123456' OR pass = old_password) THEN RETURN 'FALSE'; 
    ELSE RETURN 'TRUE'; 
    END IF; 
END; 

幾個注意事項:

1)您應該使用ELSIF代替ELSE IF

2)如果需要調用次是在「純」SQL中的功能,BOOLEAN類型會給你錯誤,所以你可以用VARCHAR2來代替。

3)不要使用保留的話就像PASSWORD

+0

謝謝! 我現在需要使用此功能創建PROFILE,所以我使用 PASSWORD_VERIFY_FUNCTION my_verification_function; 但我不斷收到此錯誤: ORA-28004:在my_verification_function中指定的函數的無效參數 – LAXO

+0

我從來沒有創建PROFILE,我沒有任何這方面的經驗,對不起,但我不能在這種情況下給任何建議 –

2

應該這樣做:

CREATE OR REPLACE FUNCTION my_verification_function (
    username VARCHAR2, password VARCHAR2, old_password VARCHAR2) 
RETURN BOOLEAN AS 
BEGIN 

    IF LENGTH(password) < 6 THEN 
     RETURN FALSE; 
    ELSIF (password = "password" OR password = '123' OR password = old_password) THEN 
     RETURN FALSE         
    ELSE 
     RETURN TRUE; 
    END IF; 
END my_verification_function; 
/

alter profile default limit password_verify_function my_verification_function; 

參數名稱USERNAEMPASSWORD似乎沒有什麼問題,因爲Oracle提供的默認功能(位於在ORACLE_BASE/ORACLE_HOME/RDBMS/ADMIN/UTLPWDMG.SQL)也使用它們。