MySQL中怎么根据规则生成随机密码

今天就跟大家聊聊有关MySQL中怎么根据规则生成随机密码,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

十多年的益阳网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整益阳建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“益阳网站设计”,“益阳网站推广”以来,每个客户项目都认真落实执行。

在MySQL中根据规则生成随机密码
 
MySQL 5.0 以后的版本开始支持存储过程,存储过程具有壹致性、高效性和安全性。MySQL 5.0 之前的版本并不支持存储过程,然而随着 MySQL 技术的日趋完善,存储过程将在以后的项目中得到 广泛的应用。
 
在我的应用中,我需要在用户首次注册时为该帐号生成一个随机密码。所生成的密码必须满足一定的要求,这些要求由系统管理员进行配置。
 
我们提供了下面几个对密码的要求规则,这些规则可组合使用:
 
1- 要求大写字母 UPPERCASE                =====> 缩写 [U] 
2- 要求小写字母 LOWERCASE               =====> 缩写 [L] 
3- 要求使用数字 NUMBER                      =====> 缩写 [N] 
4- 可以是任意字符 ANY_CHARACTER   ======> 缩写 [A] 
5- 必须有非字母和数字的字符 NON_ALPHANUMERIC_CHARACTER =====> 缩写 [S]
 
因此我想通过创建一个动态函数 "RANDOM_PASSWORD" 来根据要求返回随机的密码。
  www.2cto.com  
系统管理员只需要传递所需密码的规则就会返回对应的随机密码。
 
例如要求如下:
 
首字符必须大写             ======> U 
第二个字符必须小写       ======> L 
第三个字符必须是数字    ======>N 
第四个字符随意             ======>A 
第五个字符必须是非字母和数字  ======>S 
第六个字符必须是数字    ======> N    
 
那么你可以使用 "ULNASN" 参数来获取随机密码。 
所生成的密码程度跟传递的参数长度是一致的。在我们这个例子中生成的密码长度是 6。
你可以使用下面的方法来调用这个函数:
 
1
RANDOM_PASSWORD('ULNASN')
在MySQL的控制台编写函数定义前,先要将中可能已经存在的此函数定义删除,然后须将分隔符更改为$,其实我本想将分隔符改成#,后来发现没有成功,不知道是为什么,在命令行下删除 RANDOM_PASSWORD() 函数的定义与更改分隔符使用如下命令:
  www.2cto.com  
1
> DROP FUNCTION IF EXISTS RANDOM_PASSWORD;
2
mysql> delimiter $
接下来可以编写该函数,经过我调试通过的源代码如下:
 
 
01
CREATE FUNCTION RANDOM_PASSWORD (str VARCHAR(255))
02
RETURNS VARCHAR(255)
03
BEGIN
04
    DECLARE UPPER_CASE VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
05
    DECLARE LOWER_CASE VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
06
    DECLARE NUMBERS VARCHAR(10) DEFAULT '0123456789';
07
    DECLARE TEMP_CHARACTER VARCHAR(255) DEFAULT '';
08
    DECLARE NON_ALPHANUMERIC_CHARACTERS VARCHAR(255) DEFAULT '~!@#$%^&*()_+-=`:;<>,.?/';
09  www.2cto.com  
    DECLARE ALL_STRING VARCHAR(255) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()_+-=`:;<>,.?/';
10
    DECLARE STR_LENGTH INT DEFAULT 0;
11
    DECLARE i INT DEFAULT 0;
12
    DECLARE RANDOM_CHARACTER CHAR(1) DEFAULT ' ';
13
    DECLARE PASSWORD_RETURNED VARCHAR(255) DEFAULT '';
14
     
15
    SET STR_LENGTH = CHAR_LENGTH(str);
16
     
17
    WHILE i < STR_LENGTH DO
18
        SET TEMP_CHARACTER = SUBSTR(str, i + 1, 1);
19
        CASE TEMP_CHARACTER
20
            WHEN 'N' THEN
21
                SET RANDOM_CHARACTER = SUBSTR(NUMBERS, CEIL( RAND() * ( LENGTH( NUMBERS ) - 1 )), 1);
22
            WHEN 'U' THEN
23
                SET RANDOM_CHARACTER = SUBSTR(UPPER_CASE, CEIL( RAND() * ( LENGTH( UPPER_CASE ) - 1 )), 1);
24  www.2cto.com  
            WHEN 'L' THEN
25
                SET RANDOM_CHARACTER = SUBSTR(LOWER_CASE, CEIL( RAND() * ( LENGTH( LOWER_CASE ) - 1 )), 1);
26
            WHEN 'S' THEN
27
                SET RANDOM_CHARACTER = SUBSTR(NON_ALPHANUMERIC_CHARACTERS, CEIL( RAND() * ( LENGTH( NON_ALPHANUMERIC_CHARACTERS ) - 1 )), 1);
28
            WHEN 'A' THEN
29
                SET RANDOM_CHARACTER = SUBSTR(ALL_STRING, CEIL( RAND() * ( LENGTH( ALL_STRING ) - 1 )), 1);
30
            ELSE
31
                SET RANDOM_CHARACTER = '';
32
        END CASE;
33
        SET PASSWORD_RETURNED = CONCAT(PASSWORD_RETURNED, RANDOM_CHARACTER);
34
        SET i = i + 1;
35
    END WHILE;
36
     
37
    RETURN PASSWORD_RETURNED;
38
END
39
$
使用方法:
1
mysql> select RANDOM_PASSWORD('ULNASN') PASSWORD;
2  www.2cto.com  
+----------+
3
| PASSWORD |
4
+----------+
5
| Bv1n`8   |
6
+----------+
7
1 row in set (0.00 sec)
在我这里将返回的随机密码是:Bv1n`8

看完上述内容,你们对MySQL中怎么根据规则生成随机密码有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


新闻名称:MySQL中怎么根据规则生成随机密码
当前链接:http://cdiso.cn/article/pcjhce.html

其他资讯