`

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

阅读更多

转自:http://my.oschina.net/bairrfhoinn/blog/70728?from=20120805,感谢大神无私分享。特此收藏

 

 

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

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

例如要求如下:

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

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

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

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

1 RANDOM_PASSWORD('ULNASN')

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

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 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 $

使用方法:

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

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

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    利用Python如何生成随机密码

    假设我们需要编写一个简单的程序来检查MySQL数据库是否存在空密码或弱密码的情况,可以使用上述方法之一来生成随机密码,然后尝试连接数据库。 ```python import MySQLdb from custom_password import custom_...

    window系统下如何进行mysql离线安装

    3. 执行`mysqld --initialize`命令,注册mysql服务,这时会生成一个新目录data,查看.err文件,可以看到root用户生成的随机密码; 4. 执行`net start mysql`命令,启动mysql服务; 5. 执行`mysql -u root -p`命令,...

    MySQL安装教程详细

    6. **初始化数据库**:在命令行中运行初始化命令`mysqld --initialize --console`,系统会自动生成一个随机密码,这个密码非常重要,要记下来。 7. **启动MySQL服务**:打开一个新的命令行窗口,输入`...

    centos7 安装 Mysql 5.7.28,详细完整教程

    本教程详细介绍了如何在 CentOS 7 中安装 MySQL 5.7.28,包括下载 MySQL 源、安装 MySQL 源、安装 MySQL 服务端、启动 MySQL 服务、检查 MySQL 服务状态、获取临时密码、登录 MySQL 并修改密码、全局修改密码规则、...

    mysql数据库安装.

    然后,使用`mysql`命令行工具并输入随机密码登录,接着更改root用户的密码: ```bash mysql -uroot -p SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password'); quit ``` 最后,为了允许远程访问MySQL服务,...

    centos7 安装 Mysql 5

    MySQL 5.7 为 root 用户随机生成了一个临时密码,命令如下:`grep 'temporary password' /var/log/mysqld.log` 七、修改密码 获取临时密码后,需要使用临时密码登录 MySQL,进行修改密码操作,命令如下:`mysql -...

    mysql-8.0.30 centos、redhat 7 安装包

    首次安装后,MySQL会自动生成一个随机root用户的临时密码。查看此密码: ``` sudo grep 'temporary password' /var/log/mysqld.log ``` 登录MySQL并更改root用户的密码: ``` mysql -u root -p ``` 输入显示的临时...

    Linux CentOS MySQL 5.7.18 5.7.X安装教程.txt.zip_MYSQL_centos

    初次安装后,MySQL会自动生成一个随机的临时密码。查看此密码的方法是: ```bash grep 'temporary password' /var/log/mysqld.log ``` 登录MySQL并更改默认密码: ```bash mysql -u root -p ALTER USER 'root'@'...

    win10下mysql 8.0.18 安装配置方法图文教程(windows版)

    输出中会显示一个随机生成的初始密码。 6. **启动服务**:输入命令启动MySQL服务: ``` net start mysql ``` 7. **登录与修改密码**:使用管理员权限登录MySQL,输入`mysql -u root -p`,然后输入刚才获取的...

    linux 随机密码生成工具mkpasswd详解及实例

    执行这个命令后,`mkpasswd`将生成一个符合设定规则的随机密码,例如:`Z}K7hp0UPJ6v@&,c5{d3`。 ### 应用场景 `mkpasswd`生成的密码在以下场景中非常有用: 1. **用户账户安全**:为新用户创建强密码,或者定期...

    CentOS7下Mysql8.0.20离线rpm安装包

    首次安装后,MySQL会生成一个随机的临时root密码。你可以通过查看系统日志来找到这个密码: ```bash sudo grep 'temporary password' /var/log/mysqld.log ``` 然后,使用这个临时密码登录并更改root用户的密码: ...

    mysql5.7安装.docx

    - 运行命令 `./bin/mysqld --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data --initialize` 初始化数据库,该命令会自动生成一个随机的初始密码。 4. **服务配置**: - 将 MySQL 的启动脚本复制到 `/...

    mysql的下载与安装以及常见问题的解决方案

    - 或者使用`mysqld --initialize`命令进行初始化,这将会生成一个随机的root用户密码(不建议使用)。 4. **安装MySQL服务**:执行`mysqld --install`命令来安装MySQL服务。 5. **启动MySQL服务**:通过`...

    Linux_mysql_5.6.24安装包.rar

    为了安全起见,安装后的MySQL通常会自动生成一个随机的临时密码,你可以通过以下命令查看: ```bash sudo grep 'temporary password' /var/log/mysqld.log ``` 登录MySQL并更改初始密码: ```bash mysql -u root ...

    CentOS7.x离线安装Mysql5.7.pdf

    - MySQL 5.7版本在安装完成后,root用户的密码由系统随机生成,这个密码会记录在日志文件`mysqld.log`中,可以通过查看这个日志文件来获取root用户的随机密码。 #### 第五步:修改root登录密码 1. **登录MySQL...

    Windows上安装mysql-8.0.11-winx64.zip教程

    在`my.ini`文件中,需要设置MySQL服务器的基本参数,包括字符集、端口号、数据目录等关键配置。以下是一个示例配置: ```ini [mysql] # 设置MySQL客户端默认字符集 default-character-set=utf8 [mysqld] # 设置...

    ubuntu安装mysql(1).doc

    安装完成后,会在`/etc/mysql/debian.cnf`文件中生成一个初始用户名和密码(默认随机)。使用这些凭据登录MySQL。 3. **设置root用户密码**: 登录MySQL后,你可以通过SQL命令更改root用户的密码。例如,设置密码...

    centos7_mysql的安装1

    首次启动MySQL时,它会生成一个随机的临时密码,这个密码会在日志文件中显示。通常,日志文件位于 `/var/log/mysqld.log`。打开日志文件,找到类似这样的信息: ``` A temporary password is generated for root@...

    手动配置phpmyadmin和mysql密码的两种方案

    在设置和管理密码时,强烈建议使用复杂且随机的字符组合,避免使用容易被猜测的密码。同时,定期更换密码可以增加系统的安全性。在PHP环境中,还可以考虑使用`password_hash()`函数来存储密码,该函数可以生成不可逆...

Global site tag (gtag.js) - Google Analytics