设为首页 加入收藏

TOP

在MySQL中根据规则生成随机密码(一)
2014-11-24 03:13:12 来源: 作者: 【 】 浏览:7
Tags:MySQL 根据 规则 生成 随机 密码

在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
mysql> 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
+----------+
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇根据mysql慢日志监控SQL语句执行.. 下一篇根据表删除另一个表

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)
·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)