转自: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;
|
接下来可以编写该函数,经过我调试通过的源代码如下:
01 |
CREATE FUNCTION RANDOM_PASSWORD (str VARCHAR (255))
|
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 '' ;
|
15 |
SET STR_LENGTH = CHAR_LENGTH(str);
|
17 |
WHILE i < STR_LENGTH DO
|
18 |
SET TEMP_CHARACTER = SUBSTR(str, i + 1, 1);
|
21 |
SET RANDOM_CHARACTER = SUBSTR(NUMBERS, CEIL( RAND() * ( LENGTH( NUMBERS ) - 1 )), 1);
|
23 |
SET RANDOM_CHARACTER = SUBSTR(UPPER_CASE, CEIL( RAND() * ( LENGTH( UPPER_CASE ) - 1 )), 1);
|
25 |
SET RANDOM_CHARACTER = SUBSTR(LOWER_CASE, CEIL( RAND() * ( LENGTH( LOWER_CASE ) - 1 )), 1);
|
27 |
SET RANDOM_CHARACTER = SUBSTR(NON_ALPHANUMERIC_CHARACTERS, CEIL( RAND() * ( LENGTH( NON_ALPHANUMERIC_CHARACTERS ) - 1 )), 1);
|
29 |
SET RANDOM_CHARACTER = SUBSTR(ALL_STRING, CEIL( RAND() * ( LENGTH( ALL_STRING ) - 1 )), 1);
|
31 |
SET RANDOM_CHARACTER = '' ;
|
33 |
SET PASSWORD_RETURNED = CONCAT(PASSWORD_RETURNED, RANDOM_CHARACTER);
|
37 |
RETURN PASSWORD_RETURNED;
|
使用方法:
1 |
mysql> select RANDOM_PASSWORD( 'ULNASN' ) PASSWORD ;
|
7 |
1 row in set (0.00 sec)
|
在我这里将返回的随机密码是:Bv1n`8
当然,你运行的结果可能不一样,因为这是随机的。
分享到:
相关推荐
假设我们需要编写一个简单的程序来检查MySQL数据库是否存在空密码或弱密码的情况,可以使用上述方法之一来生成随机密码,然后尝试连接数据库。 ```python import MySQLdb from custom_password import custom_...
3. 执行`mysqld --initialize`命令,注册mysql服务,这时会生成一个新目录data,查看.err文件,可以看到root用户生成的随机密码; 4. 执行`net start mysql`命令,启动mysql服务; 5. 执行`mysql -u root -p`命令,...
6. **初始化数据库**:在命令行中运行初始化命令`mysqld --initialize --console`,系统会自动生成一个随机密码,这个密码非常重要,要记下来。 7. **启动MySQL服务**:打开一个新的命令行窗口,输入`...
本教程详细介绍了如何在 CentOS 7 中安装 MySQL 5.7.28,包括下载 MySQL 源、安装 MySQL 源、安装 MySQL 服务端、启动 MySQL 服务、检查 MySQL 服务状态、获取临时密码、登录 MySQL 并修改密码、全局修改密码规则、...
然后,使用`mysql`命令行工具并输入随机密码登录,接着更改root用户的密码: ```bash mysql -uroot -p SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password'); quit ``` 最后,为了允许远程访问MySQL服务,...
MySQL 5.7 为 root 用户随机生成了一个临时密码,命令如下:`grep 'temporary password' /var/log/mysqld.log` 七、修改密码 获取临时密码后,需要使用临时密码登录 MySQL,进行修改密码操作,命令如下:`mysql -...
首次安装后,MySQL会自动生成一个随机root用户的临时密码。查看此密码: ``` sudo grep 'temporary password' /var/log/mysqld.log ``` 登录MySQL并更改root用户的密码: ``` mysql -u root -p ``` 输入显示的临时...
初次安装后,MySQL会自动生成一个随机的临时密码。查看此密码的方法是: ```bash grep 'temporary password' /var/log/mysqld.log ``` 登录MySQL并更改默认密码: ```bash mysql -u root -p ALTER USER 'root'@'...
输出中会显示一个随机生成的初始密码。 6. **启动服务**:输入命令启动MySQL服务: ``` net start mysql ``` 7. **登录与修改密码**:使用管理员权限登录MySQL,输入`mysql -u root -p`,然后输入刚才获取的...
执行这个命令后,`mkpasswd`将生成一个符合设定规则的随机密码,例如:`Z}K7hp0UPJ6v@&,c5{d3`。 ### 应用场景 `mkpasswd`生成的密码在以下场景中非常有用: 1. **用户账户安全**:为新用户创建强密码,或者定期...
首次安装后,MySQL会生成一个随机的临时root密码。你可以通过查看系统日志来找到这个密码: ```bash sudo grep 'temporary password' /var/log/mysqld.log ``` 然后,使用这个临时密码登录并更改root用户的密码: ...
- 运行命令 `./bin/mysqld --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data --initialize` 初始化数据库,该命令会自动生成一个随机的初始密码。 4. **服务配置**: - 将 MySQL 的启动脚本复制到 `/...
- 或者使用`mysqld --initialize`命令进行初始化,这将会生成一个随机的root用户密码(不建议使用)。 4. **安装MySQL服务**:执行`mysqld --install`命令来安装MySQL服务。 5. **启动MySQL服务**:通过`...
为了安全起见,安装后的MySQL通常会自动生成一个随机的临时密码,你可以通过以下命令查看: ```bash sudo grep 'temporary password' /var/log/mysqld.log ``` 登录MySQL并更改初始密码: ```bash mysql -u root ...
- MySQL 5.7版本在安装完成后,root用户的密码由系统随机生成,这个密码会记录在日志文件`mysqld.log`中,可以通过查看这个日志文件来获取root用户的随机密码。 #### 第五步:修改root登录密码 1. **登录MySQL...
在`my.ini`文件中,需要设置MySQL服务器的基本参数,包括字符集、端口号、数据目录等关键配置。以下是一个示例配置: ```ini [mysql] # 设置MySQL客户端默认字符集 default-character-set=utf8 [mysqld] # 设置...
安装完成后,会在`/etc/mysql/debian.cnf`文件中生成一个初始用户名和密码(默认随机)。使用这些凭据登录MySQL。 3. **设置root用户密码**: 登录MySQL后,你可以通过SQL命令更改root用户的密码。例如,设置密码...
首次启动MySQL时,它会生成一个随机的临时密码,这个密码会在日志文件中显示。通常,日志文件位于 `/var/log/mysqld.log`。打开日志文件,找到类似这样的信息: ``` A temporary password is generated for root@...
在设置和管理密码时,强烈建议使用复杂且随机的字符组合,避免使用容易被猜测的密码。同时,定期更换密码可以增加系统的安全性。在PHP环境中,还可以考虑使用`password_hash()`函数来存储密码,该函数可以生成不可逆...