![](/img/trans.png)
[英]NodeJS/mySQL - ER_ACCESS_DENIED_ERROR Access denied for user 'root'@'localhost' (using password: YES)
[英]Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)
我試圖在我的服務器上部署 Web 應用程序,但我收到了這個 mysql 數據庫異常
Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)
我嘗試使用mysql -u root -p
從命令提示符訪問數據庫我能夠執行所有數據庫操作。
什么是錯誤
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:771)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3649)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1176)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2558)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:620)
at java.sql.DriverManager.getConnection(DriverManager.java:200)
at com.mpigeon.DbConnection.DbConn(DbConnection.java:26)
at com.mpigeon.CheckLoginHome.doGet(CheckLoginHome.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
您需要從 localhost 授予對 root 的訪問權限。 檢查這個ubuntu 幫助
嘗試使用root
類的..
mysql -uroot
然后你可以在登錄后檢查不同的用戶和主機
select user,host,password from mysql.user;
檢查您是否在密碼中放置了空格。
將 MySQL 服務器從 5.1.73 升級到 5.5.45 后,我遇到了同樣的錯誤還有另一種方法可以修復該錯誤。
就我而言,我能夠使用 root 密碼連接到 MySQL,但 MySQL 主動拒絕向任何用戶授予特權;
以 root 身份連接到 MySQL
mysql -u root -p
然后輸入您的 MySQL 根密碼;
選擇數據庫;
use mysql;
很可能在mysql.user
表中只有一個 root 記錄,只允許從localhost
連接(在我的情況下),但默認情況下應該有兩個 root 記錄,一個用於localhost
,另一個用於127.0.0.1
;
如果它不存在,則為Host='127.0.0.1'
root 用戶創建附加記錄;
SET @s = CONCAT('INSERT INTO mysql.user SELECT ', REPLACE((SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'user' AND TABLE_SCHEMA = 'mysql') ,"Host","'127.0.0.1'"), ' FROM mysql.user WHERE User="root"'); PREPARE stmt FROM @s; EXECUTE stmt;
除此之外,您可以執行mysql_upgrade -u -p
以查看是否一切正常。
從我這里的回答來看,認為這可能有用:
我嘗試了很多步驟來糾正這個問題。 這個問題的可能解決方案有很多來源,很難從廢話中過濾掉意義。 我終於在這里找到了一個很好的解決方案:
步驟 1:確定數據庫版本
$ mysql --version
你會在 MySQL 中看到一些這樣的輸出:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
或者像這樣為 MariaDB 輸出:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
記下您正在運行的數據庫和版本,因為稍后您將使用它們。 接下來,您需要停止數據庫,以便您可以手動訪問它。
步驟 2:停止數據庫服務器
要更改 root 密碼,您必須事先關閉數據庫服務器。
您可以使用以下命令為 MySQL 執行此操作:
$ sudo systemctl stop mysql
而對於 MariaDB 來說:
$ sudo systemctl stop mariadb
第 3 步:在沒有權限檢查的情況下重啟數據庫服務器
如果您在不加載有關用戶權限的信息的情況下運行 MySQL 和 MariaDB,它將允許您以 root 權限訪問數據庫命令行,而無需提供密碼。 這將允許您在不知情的情況下訪問數據庫。
為此,您需要停止數據庫加載存儲用戶權限信息的授權表。 因為這有點安全風險,您還應該跳過網絡以防止其他客戶端連接。
在不加載授權表或啟用網絡的情況下啟動數據庫:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的與號將使此進程在后台運行,以便您可以繼續使用終端。
現在您可以以 root 用戶身份連接到數據庫,該用戶不應要求輸入密碼。
$ mysql -u root
您將立即看到一個數據庫 shell 提示。
MySQL 提示
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDB 提示
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
現在您擁有 root 訪問權限,您可以更改 root 密碼。
步驟 4:更改根密碼
mysql> FLUSH PRIVILEGES;
現在我們實際上可以更改root密碼。
對於MySQL 5.7.6 和更高版本以及MariaDB 10.1.20 和更高版本,請使用以下命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
對於MySQL 5.7.5 及更早版本以及MariaDB 10.1.20 及更早版本,請使用:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
確保將new_password
替換為您選擇的新密碼。
注意:如果ALTER USER
命令不起作用,通常表明存在更大的問題。 但是,您可以嘗試UPDATE ... SET
來重置 root 密碼。
[重要] 這是解決我的特定問題的特定行:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
請記住在此之后重新加載授權表。
無論哪種情況,您都應該看到命令已成功執行的確認信息。
Query OK, 0 rows affected (0.00 sec)
密碼已更改,因此您現在可以停止數據庫服務器的手動實例並像以前一樣重新啟動它。
第五步:正常重啟數據庫服務器
本教程進一步介紹了重新啟動數據庫的一些步驟,但我使用的唯一部分是:
對於 MySQL,使用: $ sudo systemctl start mysql
對於 MariaDB,請使用:
$ sudo systemctl start mariadb
現在您可以通過運行以下命令確認新密碼已正確應用:
$ mysql -u root -p
該命令現在應該提示輸入新分配的密碼。 輸入它,您應該可以按預期訪問數據庫提示。
結論
您現在已恢復對 MySQL 或 MariaDB 服務器的管理訪問權限。 確保您選擇的新 root 密碼強大且安全,並將其保存在安全的地方。
如果您沒有在安裝時設置密碼,則會發生此錯誤,在這種情況下,mysql 使用 unix-socket 插件。
但是如果從設置(表mysql.user)中刪除插件鏈接會出現其他問題。 這並不能解決問題,而是會產生另一個問題。 要修復已刪除的鏈接並設置密碼(“PWD”),請執行以下操作:
1) 如上所述使用 --skip-grant-tables 運行。
如果它不起作用,則在 /etc/mysql/mysql.conf.d/mysqld.cnf 的 [mysqld] 部分中添加字符串 skip-grant-tables。 然后做 sudo service mysql restart。
2)運行mysql -u root -p,然后(更改“PWD”):
update mysql.user
set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password"
where User='root' and Host='localhost';
flush privileges;
quit
then sudo service mysql restart. Check: mysql -u root -p.
在重新啟動之前從文件 mysqld.cnf 中刪除該字符串,如果你在那里設置了它。
@bl79 是這個答案的作者,我剛剛重新發布了它,因為它確實有幫助!
我的應用程序正在使用 Mura CMS,我遇到了這個問題。 然而,解決方案是我的 mysql 本地服務器和配置文件中的密碼之間的密碼不匹配。 一旦我同步它們,它就起作用了。
我通過刪除 MySQL 創建的空用戶解決了這個問題。 我只有 root 用戶和我自己的用戶。 我刪除了其余的。
更新mysql數據庫中的用戶表。 並在空白處設置一些密碼,我使用的是 root 用戶,所以我為 root 用戶設置了密碼。
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;
然后通過提供密碼再次從 ATG CIM 嘗試,它工作正常。
我今天在安裝 SugarCRM(一個免費的 CRM)時遇到了這個問題。
系統無法使用 root 用戶連接到數據庫。 我可以明確地從控制台以 root 身份登錄......那么問題是什么?
我發現在我的情況下,我得到了完全相同的錯誤,但那是因為密碼是直接從$_POST
數據發送到 mysql 的,換句話說,我密碼中的<
字符被發送到 mysql 作為<
這意味着密碼錯誤。
其他一切都沒有幫助。 mysql 中的用戶列表是正確的,包括匿名用戶(出現在根條目之后。)
我用谷歌搜索了很多,但沒有找到我的問題的明確答案。 我使用 KeyPass 生成了一個強密碼,並且可以在 mysql 工作台上成功使用它進行連接,但不能從命令行使用。 所以我把psw改成了一個簡單的,它在命令行上工作。 我設法創建了一個能夠從終端連接的強密碼。 所以我的建議是,在嘗試各種事情之前,先嘗試使用簡單的密碼。
我正在運行 UT,我開始收到錯誤消息。 我不確定是什么問題。 但是當我將 INTELLIJ 中的編碼樣式更改為 UTF8 時,它又開始工作了。
用戶 'root'@'localhost' 訪問被拒絕(使用密碼是)hibernate
這是我的 URL db.url=jdbc:mysql://localhost:3306/somedb?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8&characterEncoding=utf8
更新mysql的表mysql.user中的空密碼
use mysql;
select host,user,password from mysql.user;
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.