mysql更新5.7版本以後,安全性大幅度上升。
MySQL5.7為root使用者随機生成了一個密碼,列印在error_log中,關于error_log的位置,如果安裝的是RPM包,則預設是 /var/log/mysqld.log 。
于是我們可以在
mysqld.log
中找到初始密碼串: cat /var/log/mysqld.log | grep password
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZlBnauADM3MjNzEWY0ADOyMTNiFWOhBDOmdDZmV2M2kTYmZGMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpeg)
用初始密碼串登陸即可:
mysql -u root -p's;*QJ6/gX1et'
但是你會登陸之後會發現很多功能都不能用,隻有修改密碼才能進行正常操作:
于是我們修改密碼:
mysql> SET PASSWORD = PASSWORD('123456');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> SET PASSWORD = PASSWORD("root");
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
卻又坑爹地說密碼不滿足政策要求。。。
那我們先看看資料庫目前的密碼政策是啥
mysql root@localhost:(none)> show VARIABLES like "%password%"
+---------------------------------------+---------+
| Variable_name | Value |
|---------------------------------------+---------|
| default_password_lifetime | 0 |
| disconnect_on_expired_password | ON |
| log_builtin_as_identified_by_password | OFF |
| mysql_native_password_proxy_users | OFF |
| old_passwords | 0 |
| report_password | |
| sha256_password_proxy_users | OFF |
| 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 |
+---------------------------------------+---------+
根據官方文檔可以發現政策為1,即MEDIUM
是以你更改密碼必須滿足:數字、小寫字母、大寫字母 、特殊字元、長度至少8位
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
或者
SET password='new_password';
如此你便成功修改了密碼,最後你還要設定一下過期時間,以防止密碼失效。
在
/etc/my.cnf
配置檔案中增加
[mysqld]
default_password_lifetime=0
或者直接通過指令設定
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER
以上便可以開心的mysql的世界裡遨遊了~~~
番外篇
但是有時候為了圖友善,資料的安全性要求也不是很高的情況下,我們通常更希望設定一個簡單的密碼,比如
123456
...
法一:
/etc/my.cnf
[mysqld]
validate_password=off
然後
service mysqld restart
或者
systemctl restart mysqld.service
重新開機mysqld,通過SHOW PLUGINS;即可看到密碼驗證的插件被停止了。
+-------------------+----------+-------------------+----------------------+-----+
| validate_password | DISABLED | VALIDATE PASSWORD | validate_password.so | GPL |
+-------------------+----------+-------------------+----------------------+-----+
法二:
更改密碼政策為LOW
set global validate_password_policy=0;
更改密碼長度
set global validate_password_length=0;
如此即可随意設定密碼:
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
或者
set password for 'root'@'localhost'=password('123456');
當然,我們還有一種辦法,就是在最最開始的時候,不設定初始密碼:
隻需要在初始化時指定
--initialize-insecure
即可,比如:
mysqld --initialize-insecure --datadir=/var/lib/mysql --basedir=/usr --user=mysql
此時,SHOW VARIABLES LIKE 'vali%';也會為空,因為該插件沒有被安裝。
【參考】 MySQL 5.7 初始密碼和密碼複雜度問題