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

php中文网
发布: 2016-06-07 17:17:48
原创
1343人浏览过

MySQL 5.0 以后的版本开始支持存储过程,存储过程具有壹致性、高效性和安全性。MySQL 5.0 之前的版本并不支持存储过程,然而随着

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" 来根据要求返回随机的密码。

系统管理员只需要传递所需密码的规则就会返回对应的随机密码。

例如要求如下:

首字符必须大写             ======> U
第二个字符必须小写       ======> L
第三个字符必须是数字    ======>N
第四个字符随意             ======>A
第五个字符必须是非字母和数字  ======>S
第六个字符必须是数字    ======> N   

那么你可以使用 "ULNASN" 参数来获取随机密码。

所生成的密码程度跟传递的参数长度是一致的。在我们这个例子中生成的密码长度是 6。

你可以使用下面的方法来调用这个函数:

RANDOM_PASSWORD('ULNASN')

壁纸样机神器
壁纸样机神器

免费壁纸样机生成

壁纸样机神器 0
查看详情 壁纸样机神器

在MySQL的控制台编写函数定义前,先要将数据库中可能已经存在的此函数定义删除,然后须将分隔符更改为$,其实我本想将分隔符改成#,后来发现没有成功,不知道是为什么,在命令行下删除 RANDOM_PASSWORD() 函数的定义与更改分隔符使用如下命令:

mysql> DROP FUNCTION IF EXISTS RANDOM_PASSWORD;
mysql> delimiter $

接下来可以编写该函数,,经过我调试通过的源代码如下:

CREATE FUNCTION RANDOM_PASSWORD (str VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
 DECLARE UPPER_CASE VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 DECLARE LOWER_CASE VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
 DECLARE NUMBERS VARCHAR(10) DEFAULT '0123456789';
 DECLARE TEMP_CHARACTER VARCHAR(255) DEFAULT '';
 DECLARE NON_ALPHANUMERIC_CHARACTERS VARCHAR(255) DEFAULT ;
 DECLARE ALL_STRING VARCHAR(255) DEFAULT ;
 DECLARE STR_LENGTH INT DEFAULT 0;
 DECLARE i INT DEFAULT 0;
 DECLARE RANDOM_CHARACTER CHAR(1) DEFAULT ' ';
 DECLARE PASSWORD_RETURNED VARCHAR(255) DEFAULT '';
 
 SET STR_LENGTH = CHAR_LENGTH(str);
 
 WHILE i   SET TEMP_CHARACTER = SUBSTR(str, i + 1, 1);
  CASE TEMP_CHARACTER
   WHEN 'N' THEN
    SET RANDOM_CHARACTER = SUBSTR(NUMBERS, CEIL( RAND() * ( LENGTH( NUMBERS ) - 1 )), 1);
   WHEN 'U' THEN
    SET RANDOM_CHARACTER = SUBSTR(UPPER_CASE, CEIL( RAND() * ( LENGTH( UPPER_CASE ) - 1 )), 1);
   WHEN 'L' THEN
    SET RANDOM_CHARACTER = SUBSTR(LOWER_CASE, CEIL( RAND() * ( LENGTH( LOWER_CASE ) - 1 )), 1);
   WHEN 'S' THEN
    SET RANDOM_CHARACTER = SUBSTR(NON_ALPHANUMERIC_CHARACTERS, CEIL( RAND() * ( LENGTH( NON_ALPHANUMERIC_CHARACTERS ) - 1 )), 1);
   WHEN 'A' THEN
    SET RANDOM_CHARACTER = SUBSTR(ALL_STRING, CEIL( RAND() * ( LENGTH( ALL_STRING ) - 1 )), 1);
   ELSE
    SET RANDOM_CHARACTER = '';
  END CASE;
  SET PASSWORD_RETURNED = CONCAT(PASSWORD_RETURNED, RANDOM_CHARACTER);
  SET i = i + 1;
 END WHILE;
 
 RETURN PASSWORD_RETURNED;
END
$

使用方法:

mysql> select RANDOM_PASSWORD('ULNASN') PASSWORD;
+----------+
| PASSWORD |
+----------+
| Bv1n`8   |
+----------+
1 row in set (0.00 sec)

在我这里将返回的随机密码是:Bv1n`8

当然,你运行的结果可能不一样,因为这是随机的。

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号