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