【问题标题】:PostgreSQL password generatorPostgreSQL 密码生成器
【发布时间】:2016-09-19 14:15:03
【问题描述】:

我需要一些关于 sql pass 生成器的帮助。我已经有一个返回 8 个随机字符的函数,但我必须确定,有小写和大写字符和数字。有什么建议吗?这是我的旧函数。

CREATE FUNCTION f_generate_password() RETURNS text AS $$
DECLARE
   password text;
   chars text;
BEGIN
   password := '';
   chars := 
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
   FOR i IN 1..8 LOOP
     password := password || SUBSTRING(chars, 
ceil(random()*LENGTH(chars))::integer, 1);
   END LOOP;
   return password;
END;
$$
LANGUAGE plpgsql;

【问题讨论】:

    标签: sql database postgresql security passwords


    【解决方案1】:

    如果您想知道算法...我不知道 PostgreSQL 语法/方言,但您可以例如:

    1) 选择 3 个 random 位置(1 到 8)并在其中放置 3 个 random 小写字母
    2) 选择 3 个 random 位置(从其余位置中)并在其中放置 3 个 random 大写字母
    3) 将 2 个 random 数字放在其余两个位置。

    【讨论】:

    • 是的,我知道,我只是想要 SQL 语法中的那个 :) 但我已经做到了...我在这里粘贴代码只是为了帮助其他有同样问题的人 :)
    【解决方案2】:

    这里有一个相同或相似问题的解决方案:)

    CREATE OR REPLACE FUNCTION f_generate_password()
      RETURNS text AS
    $BODY$
    DECLARE
       vPassword text;
       chars text;
    BEGIN
       vPassword := ''; 
       chars := 
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
      WHILE((select COALESCE(substring(vPassword from '.*[a-z]+.*'),'')) = '' OR (select COALESCE(substring(vPassword from '.*[A-Z]+.*'),'')) = '' OR (select COALESCE(substring(vPassword from '.*[0-9]+.*'),'')) = '') LOOP
      vPassword := '';
       FOR i IN 1..8 LOOP
         vPassword := vPassword || SUBSTRING(chars, ceil(random()*LENGTH(chars))::integer, 1);
      END LOOP;
       END LOOP;
       return vPassword;
    END;
    $BODY$
      LANGUAGE plpgsql;
    

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2010-12-02
      • 2016-08-18
      • 2012-03-17
      • 2013-11-13
      • 2017-10-18
      相关资源
      最近更新 更多