PLSQL中生成随机密码的函数

Function to generate random password in PLSQL

生成随机密码的函数 Genpass(p 整数, p大写 p 小写 p 特殊字符) return 密码 varchar2; select 生成密码(2,2,1,2) 它包含2个数字,2个大写字符,#等特殊字符和2个数字;

Oracle DBMS_RANDOM.STRING 功能不允许您明确声明需要特殊字符。此外,当您对每种类型的字符使用 DBMS_RANDOM.STRING 时,您最终会得到一个始终具有相同结构的系列(这甚至可能再次成为安全问题)。

但是,如果您不想一直使用相同的结构,则必须编写一些东西(以另一种随机方式)分发结构化密码的字符。

另一种选择是使用我从 AskTom 条目中采用的示例;您利用现有功能并尝试直到获得结果:

create or replace FUNCTION GENPWD( 
  p_numbers      IN NUMBER, 
  p_specialchar  IN NUMBER, 
  p_lowercase    IN NUMBER, 
  p_uppercase    IN NUMBER) return varchar2 
IS
  v_length         number := p_numbers + p_specialchar + p_lowercase + p_uppercase;
  v_password       varchar2(200);
  v_iterations     number := 0;
  v_max_iterations number := 500;
BEGIN
    loop
        v_password := dbms_random.string('p',v_length);
        v_iterations := v_iterations + 1;

           exit when (regexp_count(v_password,'[a-z]') = p_lowercase
                 and  regexp_count(v_password,'[A-Z]') = p_uppercase
                 and  regexp_count(v_password,'[0-9]') = p_numbers) 
                 or v_iterations=v_max_iterations;

    end loop;

    if v_iterations = v_max_iterations THEN
      v_password := '';
    end if;

    return(v_password);
END;