在 MySQL 中根据规则生成随机密码
转自:http://my.oschina.net/bairrfhoinn/blog/70728?from=20120805,感谢大神无私分享。特此收藏
?
?
在 MySQL 中根据规则生成随机密码来根据要求返回随机的密码。系统管理员只需要传递所需密码的规则就会返回对应的随机密码。
例如要求如下:
首字符必须大写 ======> U所生成的密码程度跟传递的参数长度是一致的。在我们这个例子中生成的密码长度是 6。
你可以使用下面的方法来调用这个函数:
view sourceprint?1
RANDOM_PASSWORD(
'ULNASN'
)
在MySQL的控制台编写函数定义前,先要将数据库中可能已经存在的此函数定义删除,然后须将分隔符更改为$,其实我本想将分隔符改成#,后来发现没有成功,不知道是为什么,在命令行下删除 RANDOM_PASSWORD() 函数的定义与更改分隔符使用如下命令:
view sourceprint?1
mysql>
DROP
FUNCTION
IF EXISTS RANDOM_PASSWORD;
2
mysql> delimiter $
接下来可以编写该函数,经过我调试通过的源代码如下:
view sourceprint?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
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
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
$
使用方法:
view sourceprint?1
mysql>
select
RANDOM_PASSWORD(
'ULNASN'
)
PASSWORD
;
2
+
----------+
3
|
PASSWORD
|
4
+
----------+
5
| Bv1n`8 |
6
+
----------+
7
1 row
in
set
(0.00 sec)
在我这里将返回的随机密码是:Bv1n`8
当然,你运行的结果可能不一样,因为这是随机的。
?
?
?
?
?
?
?