【问题标题】:Function to generate random password in PLSQL在 PLSQL 中生成随机密码的函数
【发布时间】:2021-12-28 12:45:33
【问题描述】:

创建随机密码的功能 Genpass(p 整数, p 大写 p 小写 p 特殊字符) 返回密码 varchar2; 选择 Genpassword(2,2,1,2) 它包含2个数字,2个大写字符,特殊字符如#和2个数字;

【问题讨论】:

  • 你有什么问题?
  • 我的问题是关于随机密码生成功能,它在 plsql 中创建包含数字、字母和特殊字符的密码
  • 你的问题不清楚。你需要一个函数吗?你有一个不起作用的功能吗?到目前为止你的努力是什么?你在哪里卡住了?
  • 创建或替换 FUNCTION GENPWD( PNOIT IN NUMBER, PSC IN NUMBER, PL IN NUMBER, PU IN NUMBER) return varchar2 is pwd varchar2(11);开始选择 pwd:= dbms_random.string('U',pu), pwd:=dbms_random.string('l',pl), pwd:= dbms_random.string('x',psc), pwd:= dbms_random。来自双重的字符串('a',pnoit);返回密码;结束;

标签: function random plsql passwords


【解决方案1】:

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;

【讨论】:

  • 你能在MYSQL中转换这段代码吗
  • 不抱歉,我不会说 MySQL。我只是一个 SQL/PLSQL 人
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 2010-09-08
  • 2020-03-02
  • 2011-08-31
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多