使用profile的PASSWORD_VERIFY_FUNCTION參數實現自定義的密碼驗證規則


1. @?/rdbms/admin/utlpwdmg.sql 生成 verify_function_11g

2. 修改verify_function_11g函數,使其使用相關的升級要求。

=========================================================================

profile的PASSWORD_VERIFY_FUNCTION參數,允許我們在創建用戶或者更改用戶
密碼時實施自定義的密碼驗證規則。

       1.首先,我們需要創建一個自己的實現密碼驗證規則的函數,該函數必須創建在sys模式
下,而且必須有三個類型為varchar2的輸入參數,第一個參數,包含我們要修改的用戶名,第
二個參數包含新密碼,第三個參數包含舊密碼,並且返回類型為布爾類型。

      舉一個簡單的例子,如果我們需要使密碼最少保持6位,並在用戶修改密碼時在
      sys.passwd_changed表中記錄用戶的舊密碼和新密碼:
      
      首先創建表passwd_changed:
      
      SQL> conn sys/*** as sysdba
      Connected.
      SQL> create table passwd_changed
        2  (
        3    user_name  varchar2(20) ,
        4    old_passwd varchar2(100) ,
        5    new_passwd varchar2(100) 
        6  )
        7  ;
      
      Table created.
      
      創建實現密碼自定義規則的函數my_password_verify:
      
      SQL> CREATE OR REPLACE FUNCTION my_password_verify   (username VARCHAR2   ,password VARCHAR2   ,old_password VARCHAR2   ) RETURN BOOLEAN IS
        2  BEGIN
        3  IF LENGTH(password) < 6 THEN
        4  raise_application_error(-20001,'Password must be at least 6 characters long');
        5  END IF;
        6  INSERT INTO passwd_changed VALUES(username,old_password,password);
        7  RETURN(TRUE);
        8  END;
        9  /
      
      Function created.
      
      2.創建profile實施自定義密碼驗證規則:
      
      SQL> create profile TEST_PROFILE limit
      2    password_verify_function MY_PASSWORD_VERIFY;
    
       Profile created.
       
      3.使用我們創建的profile:TEST_PROFILE 創建用戶test_user,密碼為test,看看會發生
      什么:
      SQL> create user test_user
        2    identified by test
        3    default tablespace USERS
        4    temporary tablespace temp
        5    profile TEST_PROFILE;
      create user test_user
      *
      ERROR at line 1:
      ORA-28003: password verification for the specified password failed
      ORA-20001: Password must be at least 6 characters long
      
      可以看到,我們自定義的密碼驗證規則已經生效,密碼:test長度小於6位時,創建用戶失敗。
      
      4.我們修改密碼為test12,重新創建用戶test_user:
      
      SQL> create user test_user
      2    identified by test12
      3    default tablespace USERS
      4    temporary tablespace temp
      5    profile TEST_PROFILE;
    
      User created.
      
      
      密碼:test12長度等於6位時,創建用戶成功。
      
      5.檢查sys.passwd_changed表數據:
      SQL> select * from sys.passwd_changed;
 
      USER_NAME   OLD_PASSWD     NEW_PASSWD
      -------------------- ------------------------- 
      TEST_USER                              TEST12
 
      6.更改test_user的密碼為test,看看是否可以成功:
      
      SQL> alter user test_user identified by test;
 
       alter user test_user identified by test
        
       ORA-28003: password verification for the specified password failed
       ORA-20001: Password must be at least 6 characters long
 
      7.更改test_user的密碼為test123,看看是否可以成功:
      
      SQL> alter user test_user identified by test123;
 
       User altered
 
      
     8.檢查sys.passwd_changed表數據:
     
     SQL> select * from sys.passwd_changed;
 
     USER_NAME   OLD_PASSWD     NEW_PASSWD
     -------------------- ------------------------- 
     TEST_USER                              TEST12
     TEST_USER                              TEST123


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM