〇 环境:
CentOS 6.5 64bit (文末有Debian/Ubuntu deb包的密码问题)
mysql-server版本:5.7.11
〇 背景:
mysql 5.7以后,安全性大幅度上升,用习惯了老版本 的用户刚使用会有一些不适。
如,默认安装后初始密码不为空;
或找不到初始密码在哪;
再比如,设置新密码会报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
其主要实现方式主要是通过【validate_password】插件实现。
mysql安装之后,通常需要初始化datadir等。
如果根据安装方式的不同,通过service mysqld start来第一次启动数据库的话, 会初始化数据库。
并默认安装验证密码插件(默认安装为 新特性,5.6中 安装方法见下 )
实际上该步骤初始化方式是通过mysqld --initialize来实现。
〇 初始密码:
在5.7.6以后的版本,如5.7.11,默认初始的密码是在errlog中。
查看配置文件或者通过ps -ef|grep error=可以知道errlog默认位置。
通过查errlog中的信息,可以得知初始密码如下:
故通过
即可登入
并且第一次使用随机生成的密码登录后,必须第一步做密码修改操作,否则会抛出:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
〇 密码复杂度:
修改当前登入mysql用户密码和老版本中一样:
若使用老版本的SET PASSWORD=PASSWORD('')方式来修改密码的话,也会抛出警告:
大致意思是这种方式将会在未来版本中移除,
新的修改方式是:(不需要flush privileges;)
当然,官方还建议使用如下方式来修改密码:
同时,密码“过于简单”时也会报错:
这个validate_password密码强度审计插件决定了你设置的密码是否“过于简单”。
5.7初始化后,默认会安装这个插件,若没有安装,则 SHOW VARIABLES LIKE 'vali%'则 会返回 空。
对应参数的value值也为默认值,以下是这些值的解释
想要关闭这个插件,则在配置文件中加入以下并重启mysqld即可:
[mysqld]
validate_password=off
或者
UNINSTALL PLUGIN validate_password;
即可
重启mysqld后通过SHOW PLUGINS;可以查到:
〇 5.7.6及之前的版本:
而在5.7.6之前的版本,初始化方式也不一样,故默认初始化密码存放的位置也不一样:
其中,在5.7.6后续版本中,mysql_install_db已经被废弃,而后续版本将通过mysqld --initialize 来初始化。
在5.6.8以后的版本,如果是通过mysql_install_db脚本来初始化,配合--random-passwords选项,则密码会在 /root/.mysql_secret中,如
〇 5.6版本中的validate_password插件:
当然,mysql 5.6也可以安装这个插件,安装起来十分简单:
修改配置文件:
〇 5.7版本初始化时不设置初始密码,并不安装validate_password插件
当然在一些实验机环境中,可能不需要这样做,mysql5.7也提供了不安装该插件并不生成随机密码的操作。
只需要在初始化时指定--initialize-insecure即可,比如:
此时,SHOW VARIABLES LIKE 'vali%';也会为空,因为该插件没有被安装。
〇 关于5.7中 mysqld 其他选项参数
可以用如下命令去查看:
〇 Debian/Ubuntu 包安装的密码问题
在通过deb包安装的时候,会被询问指定root密码,如果设置为空,会输出:
[Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
〇 参考文档:
MySQL 5.6 Reference Manual / Security / Security Plugins / The Password Validation Plugin
MySQL 5.7 Reference Manual / Initializing the Data Directory Manually Using mysqld
作者微信公众号(持续更新)
![](//img.blog.itpub.net/blog/attachment/201805/23/29773961_1527062790uKMo.png?x-oss-process=style/bb)
CentOS 6.5 64bit (文末有Debian/Ubuntu deb包的密码问题)
mysql-server版本:5.7.11
〇 背景:
mysql 5.7以后,安全性大幅度上升,用习惯了老版本 的用户刚使用会有一些不适。
如,默认安装后初始密码不为空;
或找不到初始密码在哪;
再比如,设置新密码会报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
其主要实现方式主要是通过【validate_password】插件实现。
mysql安装之后,通常需要初始化datadir等。
如果根据安装方式的不同,通过service mysqld start来第一次启动数据库的话, 会初始化数据库。
并默认安装验证密码插件(默认安装为 新特性,5.6中 安装方法见下 )
- Initializing MySQL database: [ OK ]
- Installing validate password plugin: [ OK ]
- Starting mysqld: [ OK ]
〇 初始密码:
在5.7.6以后的版本,如5.7.11,默认初始的密码是在errlog中。
查看配置文件或者通过ps -ef|grep error=可以知道errlog默认位置。
- # ps -ef | grep error=
- mysql 2387 2189 0 23:10 pts/0 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
- root 2464 1131 0 23:28 pts/0 00:00:00 grep error=
通过查errlog中的信息,可以得知初始密码如下:
- # cat /var/log/mysqld.log | grep "temporary password"
- 2016-04-08T15:10:00.920194Z 1 [Note] A temporary password is generated for root@localhost: yP(DO;EM&2CY
故通过
- mysql -uroot -p'yP(DO;EM&2CY'
并且第一次使用随机生成的密码登录后,必须第一步做密码修改操作,否则会抛出:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
〇 密码复杂度:
修改当前登入mysql用户密码和老版本中一样:
- mysql> SET PASSWORD=PASSWORD('Root1234@');
- Query OK, 0 rows affected, 1 warning (0.00 sec)
- mysql> FLUSH PRIVILEGES;
- Query OK, 0 rows affected (0.00 sec)
大致意思是这种方式将会在未来版本中移除,
- Warning 1287 'SET PASSWORD = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD = '' instead
新的修改方式是:(不需要flush privileges;)
- mysql> SET password='Root1234@';
当然,官方还建议使用如下方式来修改密码:
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
同时,密码“过于简单”时也会报错:
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
这个validate_password密码强度审计插件决定了你设置的密码是否“过于简单”。
- mysql> SHOW VARIABLES LIKE 'vali%';
- +--------------------------------------+--------+
- | Variable_name | Value |
- +--------------------------------------+--------+
- | validate_password_dictionary_file | |
- | validate_password_length | 8 |
- | validate_password_mixed_case_count | 1 |
- | validate_password_number_count | 1 |
- | validate_password_policy | MEDIUM |
- | validate_password_special_char_count | 1 |
- +--------------------------------------+--------+
- 6 rows in set (0.00 sec)
5.7初始化后,默认会安装这个插件,若没有安装,则 SHOW VARIABLES LIKE 'vali%'则 会返回 空。
对应参数的value值也为默认值,以下是这些值的解释
- validate_password_length 8 # 密码的最小长度,此处为8。
- validate_password_mixed_case_count 1 # 至少要包含小写或大写字母的个数,此处为1。
- validate_password_number_count 1 # 至少要包含的数字的个数,此处为1。
- validate_password_policy MEDIUM # 强度等级,其中其值可设置为0、1、2。分别对应:
- 【0/LOW】:只检查长度。
- 【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。
- 【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为1。
- validate_password_special_char_count 1 # 至少要包含的个数字符的个数,此处为1。
想要关闭这个插件,则在配置文件中加入以下并重启mysqld即可:
[mysqld]
validate_password=off
或者
UNINSTALL PLUGIN validate_password;
即可
重启mysqld后通过SHOW PLUGINS;可以查到:
- +-------------------+----------+-------------------+----------------------+-----+
- | validate_password | DISABLED | VALIDATE PASSWORD | validate_password.so | GPL |
- +-------------------+----------+-------------------+----------------------+-----+
〇 5.7.6及之前的版本:
而在5.7.6之前的版本,初始化方式也不一样,故默认初始化密码存放的位置也不一样:
- bin/mysql_install_db --basedir=/usr --datadir=/var/lib/mysql --user=root
- [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
在5.6.8以后的版本,如果是通过mysql_install_db脚本来初始化,配合--random-passwords选项,则密码会在 /root/.mysql_secret中,如
- cat /root/.mysql_secret
- # Password set for user 'root@localhost' at 2016-04-08 16:13:51
- yP(DO;EM&2CY
〇 5.6版本中的validate_password插件:
当然,mysql 5.6也可以安装这个插件,安装起来十分简单:
修改配置文件:
[mysqld] plugin-load=validate_password.so然后在mysql中安装:
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
〇 5.7版本初始化时不设置初始密码,并不安装validate_password插件
当然在一些实验机环境中,可能不需要这样做,mysql5.7也提供了不安装该插件并不生成随机密码的操作。
只需要在初始化时指定--initialize-insecure即可,比如:
- mysqld --initialize-insecure --datadir=/var/lib/mysql --basedir=/usr --user=mysql
〇 关于5.7中 mysqld 其他选项参数
可以用如下命令去查看:
- mysqld --verbose --help | grep password
〇 Debian/Ubuntu 包安装的密码问题
在通过deb包安装的时候,会被询问指定root密码,如果设置为空,会输出:
[Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
〇 参考文档:
MySQL 5.6 Reference Manual / Security / Security Plugins / The Password Validation Plugin
MySQL 5.7 Reference Manual / Initializing the Data Directory Manually Using mysqld
作者微信公众号(持续更新)
![](http://img.blog.itpub.net/blog/attachment/201805/23/29773961_1527062790uKMo.png?x-oss-process=style/bb)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29773961/viewspace-2077579/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29773961/viewspace-2077579/