MySQL access denied for user ...
MySQL安裝完成后出現最多的問題是程序無法連接到數據庫「Access denied」,網上的帖子很多,大多是教你如何調整配置以實現連接,然而并沒有真正告訴你為什么會出現該問題,這里總結一下,希望可以幫助大家盡快解決問題。前提是你要連接的MySQL數據庫沒有ip地址、端口、防火墻設置等網路方面的問題。
部分開發者「本人也是其中之一,哈哈」使用root用戶直接連接MySQL,強烈不推薦,因為MySQL的root用戶是管理數據庫用的,應用程序通過root連接數據庫非常非常不安全,甚至破壞了MySQL的賬戶安全體系,尤其是生產環境,DBA絕對不會讓你這么干的。
只要Access denied是由于賬戶權限問題導致的,一般推薦的***實踐步驟如下,遵從這些步驟,你既可以了解到整個MySQL的賬戶權限體系,同時又不再可能遇到MySQL Access denied for user...這個問題。
MySQL添加數據庫并配置用戶和權限的***實踐樣例
一、以root用戶身份連接到MySQL服務器,如果已為root帳戶分配了密碼,則還必須提供-p選項。
- //以root用戶身份登錄到MySQL服務
- shell> mysql -u root -p
- //與上面命令功能一致,只是默認選中了mysql這個庫
- shell> mysql -u root -p mysql
二、創建一個測試數據庫mytest
- mysql> create database mytest character set 'utf8' collate 'utf8_general_ci';
知識拓展:顯示已有庫
- mysql> show databases;
三、以root身份連接到服務器,添加新帳戶
- //創建一個主機名限制為localhost密碼是mypass的jeffrey用戶
- mysql> create user 'jeffrey'@'localhost' identified by 'mypass';
帳戶的主機名部分(如果省略)默認為“%”。%表示所有主機都可以通過當前的賬戶訪問數據庫。
知識拓展:對賬戶進行查詢、修改、刪除等操作
- //查看已有賬戶
- mysql> select user,host from mysql.user;
- //可根據需要修改賬戶密碼,注意區分版本
- //從MySQL 5.7.6開始,使用alter user語法修改密碼
- mysql> alter user 'jeffrey'@'localhost' identified by 'new_password';
- //在5.7.6之前,使用set password語法修改密碼
- mysql> set password for 'jeffrey'@'localhost' = password('new_password');
- //重命名賬戶
- mysql> rename user 'jeffrey'@'localhost' to 'jeff'@'127.0.0.1';
- //刪除賬戶
- mysql> drop user 'jeffrey'@'localhost';
四、對賬戶賦權
- //針對mytest庫的所有操作權限分配給'jeffrey'@'localhost'賬戶
- mysql>grant all on mytest.* to 'jeffrey'@'localhost';
- //針對db2庫的invoice對象的select權限分配給'jeffrey'@'localhost'賬戶,并允許該賬戶可繼續下發權限
- mysql> grant select on db2.invoice to 'jeffrey'@'localhost' with grant option;
- 知識拓展:移除、查看已經設置的權限
- //移除權限
- mysql> revoke all privileges on *.* from 'jeffrey'@'localhost';
- mysql> revoke select on db2.invoice from 'jeffrey'@'localhost';
- //顯示root權限
- mysql> show grants for 'root'@'localhost';
- //要顯示授予您用于連接到服務器的帳戶的權限,可以使用以下任何語句:
- mysql> show grants;
- mysql> show grants for current_user;
- mysql> show grants for current_user();
五、刷新權限,立即生效
- mysql> flush privileges;
六、連接測試
- //這里給出jdbc連接mysql的字符串,方便驗證
- jdbc:mysql://ip:3306/mytest?useUnicode=true&characterEncoding=utf8
總結
通過上面的操作步驟,相信您已經對整個MySQL的賬戶權限管理體系有個很清楚的認識,如果出現MySQL Access denied for user...問題只需要按照上面的步驟排查一下即可***解決。
之所以,這么多的開發者遇到MySQL Access denied for user...問題,主要的原因有三:一是因為直接使用root連接,默認root只能本地連接,遠程連接自然失敗;二是因為賬戶與權限設置不正確;三是根本不了解MySQL賬戶權限管理的一般步驟「大部分屬于這種情況」。
【本文為51CTO專欄作者“朱國立”的原創稿件,轉載請通過作者微信公眾號“開發者圓桌”獲取聯系和授權】



















