mysql8.0遠端連線許可權設定和專案連線mysql時報caching_sha2_password錯誤
1.登入MySQL
mysql -u root -p
輸入您的密碼
2.選擇 mysql 資料庫
use mysql;
因為 mysql 資料庫中儲存了使用者資訊的 user 表。
3.在 mysql 資料庫的 user 表中檢視當前 root 使用者的相關資訊
select host, user, authentication_string, plugin from user;
執行完上面的命令後會顯示一個表格
查看錶格中 root 使用者的 host,預設應該顯示的 localhost,只支援本地訪問,不允許遠端訪問。
我們看host和user兩列,host和user中root對應的值為localhost,即root使用者的訪問許可權為localhost,想把該使用者的訪問許可權設定可遠端連線,我們只需要把localhost更改為通配的%就可以了。上面的許可權操作語句沒有走通,這裡就直接使用update語句來更改吧。
update user set host = "%" where user = "root";
修改之後就將root使用者的訪問許可權設定成了可遠端訪問了。
FLUSH PRIVILEGES;
systemctl start firewalld # 開啟防火牆
systemctl stop firewalld # 關閉防火牆
systemctl status firewalld #檢查防火牆狀態
一般需要關閉防火牆才能連線。關閉遠端伺服器防火牆後,可以連線了
如果你覺得關閉防火牆不安全,可開啟遠端伺服器的iptables(安裝或升級命令“yum install iptables”)(我用root使用者登入的),並用“vi /etc/sysconfig/iptables”檢查3306埠是否開啟,如沒有,在檔案中加入“-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT”(如下所示),儲存檔案並用“service iptables restart”命令重啟iptables
專案連線mysql時報caching_sha2_password錯誤
重點看caching_sha2_password這個,由於我安裝的mysql是8.0的版本,
mysql8.0和5.x其中一個改動就是加密認證方式發生改變,
caching_sha2_password是8.0
mysql_native_password是5.x
解決方案有兩個:
1,更改mysql的加密認證方式,更改方法請參考:https://blog.csdn.net/h996666/article/details/80921913
2,更改mysql的jdbc版本,直接在xx.pom修改版本號即可。
mysql jdbc的maven連結:http://mvnrepository.com/artifact/mysql/mysql-connector-java
8.0.x之後的應該都是可以的
我選擇了第2個方案,第一個方案沒試過。
我繼續跑專案又遇到:
Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
原因:
同一個ip在短時間內產生太多(超過mysql資料庫max_connection_errors的最大值)中斷的資料庫連線而導致的阻塞;
解決方法:
解決方法:
1、提高允許的max_connection_errors數量:
① 進入Mysql資料庫檢視max_connection_errors: show variables like '%max_connect_errors%';
② 修改max_connection_errors的數量為1000: set global max_connect_errors = 1000;
③ 檢視是否修改成功:show variables like '%max_connect_errors%';
2、使用mysqladmin flush-hosts 命令清理一下hosts檔案(不知道mysqladmin在哪個目錄下可以使用命令查詢:whereis mysqladmin);
① 在查詢到的目錄下使用命令修改:mysqladmin --socket=/tmp/kkimdb.sock --port=3306 -uhyman -p flush-hosts
備註: 配置有master/slave主從資料庫的要把主庫和從庫都修改一遍的(我就吃了這個虧明明很容易的幾條命令結果折騰了大半天);
mysql> flush hosts; 也可以
max_connect_errors是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。max_connect_errors的值與效能並無太大關係。
預設情況下,my.cnf檔案中可能沒有此行,如果需要設定此數值,手動新增即可。
[[email protected] ~]# vi /etc/my.cnf
max_connect_errors = 1000
配置說明
當此值設定為10時,意味著如果某一客戶端嘗試連線此MySQL伺服器,但是失敗(如密碼錯誤等等)10次,則MySQL會無條件強制阻止此客戶端連線。
如果希望重置此計數器的值,則必須重啟MySQL伺服器或者執行 mysql> flush hosts; 命令。
當這一客戶端成功連線一次MySQL伺服器後,針對此客戶端的max_connect_errors會清零。
影響與錯誤形式
如果max_connect_errors的設定過小,則網頁可能提示無法連線資料庫伺服器;
而通過SSH的mysql命令連線資料庫,則會返回 ERROR 1129 (00000): Host 'gateway' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 錯誤。
功能與作用
一般來說建議資料庫伺服器不監聽來自網路的連線,僅僅通過sock連線,這樣可以防止絕大多數針對mysql的攻擊;如果必須要開啟mysql的網路連線,則最好設定此值,以防止窮舉密碼的攻擊手段。