天天看點

mysql5.7密碼政策及修改技巧

mysql更新5.7版本以後,安全性大幅度上升。

MySQL5.7為root使用者随機生成了一個密碼,列印在error_log中,關于error_log的位置,如果安裝的是RPM包,則預設是 /var/log/mysqld.log 。

于是我們可以在

mysqld.log

中找到初始密碼串:

cat /var/log/mysqld.log | grep password
           
mysql5.7密碼政策及修改技巧

用初始密碼串登陸即可:

mysql -u root -p's;*QJ6/gX1et'
           

但是你會登陸之後會發現很多功能都不能用,隻有修改密碼才能進行正常操作:

mysql5.7密碼政策及修改技巧

于是我們修改密碼:

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

mysql5.7密碼政策及修改技巧
是以你更改密碼必須滿足:數字、小寫字母、大寫字母 、特殊字元、長度至少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 初始密碼和密碼複雜度問題