MySQL 5.7 初始密碼和密碼複雜度問題
〇 環境:
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
作者微信公眾號(持續更新)
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
作者微信公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-2077579/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 5.7 初始化密碼或隨機密碼MySql密碼隨機
- CentOS初始化Mysql5.7密碼CentOSMySql密碼
- MySQL5.7初始密碼檢視及重置MySql密碼
- 密碼複雜度設定函式密碼複雜度函式
- Linux 生成複雜密碼並且檢查密碼強度Linux密碼
- Linux 如何設定密碼複雜度?Linux密碼複雜度
- mysql密碼和登入問題MySql密碼
- 密碼的複雜化密碼
- 如何在 Linux 生成複雜密碼並且檢查密碼強度Linux密碼
- mysql 5.7忘記root密碼MySql密碼
- 複雜密碼生成工具apg密碼
- Oracle EBS 資料庫密碼複雜度設定Oracle資料庫密碼複雜度
- 【PROFILE】Oracle11g密碼複雜度說明Oracle密碼複雜度
- mac版MySQL重置初始密碼MacMySql密碼
- MYSQL5.7 ROOT密碼修改教程MySql密碼
- MySQL 5.7修改忘記root密碼MySql密碼
- ruby指令碼,隨機生成複雜密碼指令碼隨機密碼
- Profile設定高標準密碼複雜度的方法密碼複雜度
- Javascript校驗密碼複雜度的正規表示式JavaScript密碼複雜度
- ubuntu root預設密碼(初始密碼)Ubuntu密碼
- MYSQL修改密碼和忘記ROOT密碼MySql密碼
- mysql5.7重置root密碼MySql密碼
- MySQL5.7密碼欄位變更MySql密碼
- Ubuntu MySQL5.7設定root密碼UbuntuMySql密碼
- MySQL 5.7 密碼安全策略簡介MySql密碼
- 分享Profile設定高標準密碼複雜度的方法密碼複雜度
- oracle 開啟複雜密碼驗證Oracle密碼
- Mysql修改密碼之後,Navicat依然使用舊密碼連線問題MySql密碼
- mysql密碼遺忘和登陸報錯問題MySql密碼
- mysql 忘記密碼,mysql修改密碼MySql密碼
- MySQL5.7忘記root密碼處理MySql密碼
- MySQL 5.7遺忘root密碼重置記錄MySql密碼
- Mysql 5.7忘記root密碼怎麼辦MySql密碼
- 使用PASSWORD_VERIFY_FUNCTION設定使用者密碼複雜度Function密碼複雜度
- 11gR2 Database使用者密碼複雜度驗證Database密碼複雜度
- MySQL初始密碼忘記了怎麼辦MySql密碼
- mysql5.7及以後版本設定密碼MySql密碼
- ubuntu系統下mysql重置密碼和修改密碼操作UbuntuMySql密碼