zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    LeetCode对撞指针汇总
    167. Two Sum II
    215. Kth Largest Element in an Array
    2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
    题解 Educational Codeforces Round 84 (Rated for Div. 2) (CF1327)
    题解 JZPKIL
    题解 八省联考2018 / 九省联考2018
    题解 六省联考2017
    题解 Codeforces Round #621 (Div. 1 + Div. 2) (CF1307)
    题解Codeforces Round #620 (Div. 2)
  • 原文地址:https://www.cnblogs.com/fxcoding/p/14281891.html
Copyright © 2011-2022 走看看