我尝试在我的服务器上部署Web应用程序,我收到了这个mysql数据库异常 “访问被拒绝用户'root'@'localhost'(使用密码: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)
答案 0 :(得分:21)
您需要从localhost授予对root用户的访问权限。查看this ubuntu帮助
答案 1 :(得分:8)
尝试使用root
之类的..
mysql -uroot
然后您可以在使用
登录后检查不同的用户和主机select user,host,password from mysql.user;
答案 2 :(得分:6)
检查你是否在密码中加了空格。
答案 3 :(得分:2)
将MySQL服务器从5.1.73升级到5.5.45后,我遇到了同样的错误 还有另一种方法可以解决这个错误。
在我的情况下,我能够使用root密码连接到MySQL,但MySQL主动拒绝向任何用户授予GRANT PRIVILEGES;
以root身份连接到MySQL
mysql -u root -p
然后输入您的MySQL root密码;
选择数据库;
use mysql;
很可能在mysql.user
表中只有一条root记录允许仅从localhost
连接(在我的情况下),但默认情况下应该有两条root记录,一个用于localhost
,另一个用于127.0.0.1
;
如果root用户不在那里,则为其创建额外的记录1};
Host='127.0.0.1'
除此之外,您还可以执行 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;
看一切是否正常。
答案 4 :(得分:1)
我的应用程序正在使用Mura CMS,我遇到了这个问题。但是解决方案是我的mysql本地服务器和配置文件中的密码之间的密码不匹配。一旦我同步它们就行了。
答案 5 :(得分:0)
我通过删除由MySQL创建的空用户解决了这个问题。我只有root用户和我自己的用户。我删掉了其余的。
答案 6 :(得分:0)
在 mysql 数据库中更新用户表。并设置一些空白的密码,我使用root用户,所以我为root用户设置密码。
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;
然后再通过提供密码从ATG CIM尝试,它运行良好。
答案 7 :(得分:0)
今天我在安装SugarCRM(一个免费的CRM)时遇到了这个问题。
系统无法使用root用户连接到数据库。我可以明确地从控制台以root身份登录......那么问题是什么?
我发现在我的情况下,我得到了完全相同的错误,但那是因为密码直接从$_POST
数据发送到mysql,换句话说,<
字符从我的密码发送到mysql为<
,这意味着密码错误。
其他一切都没有帮助。 mysql中的用户列表是正确的,包括匿名用户(出现在根条目之后)。
答案 8 :(得分:0)
我google了很多,但没有找到我的问题的明确答案。我使用KeyPass生成一个强密码,可以在mysql workbench上成功使用它来连接,但不能从命令行连接。因此,我将psw更改为一个简单的psw,它在命令行上运行。我设法创建了一个能够从终端连接的强密码。所以我的建议是,在尝试所有类型的事情之前先尝试使用简单的密码。
答案 9 :(得分:0)
我正在运行UT并且我开始收到错误消息。我不确定是什么问题。但是当我将INTELLIJ中的编码风格改为UTF8时,它又重新开始工作了。
用户“root”@“localhost”访问被拒绝(使用密码是) 冬眠
这是我的网址 = db.url配置参数JDBC:MySQL的://本地主机:3306 / somedb了useUnicode =真安培; connectionCollation = utf8_general_ci&安培; characterSetResults = UTF8&安培;的characterEncoding = UTF8
答案 10 :(得分:0)
根据我的回答here,认为这可能有用:
我尝试了很多步骤来纠正这个问题。对于这个问题有很多可能解决方案的来源很难从废话中过滤出来。我终于找到了一个很好的解决方案here:
第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用户身份连接到数据库,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)
密码已更改,因此您现在可以停止数据库服务器的手动实例并按原样重新启动它。
步骤5:正常重启数据库服务器
本教程进一步重新启动数据库,但我使用的唯一部分是:
对于MySQL,请使用: $ sudo systemctl启动mysql
对于MariaDB,请使用:
$ sudo systemctl start mariadb
现在,您可以通过运行以下方式确认已正确应用新密码:
$ mysql -u root -p
该命令现在应该提示新分配的密码。输入它,您应该按预期访问数据库提示符。
<强>结论强>
您现在可以恢复对MySQL或MariaDB服务器的管理访问权限。确保您选择的新root密码强大且安全,并将其保存在安全的地方。
答案 11 :(得分:0)
如果您未在安装时设置密码,则会发生此错误,在本例中为使用unix-socket插件的mysql。
但是,如果从设置(表mysql.user)中删除插件链接,则会出现其他问题。这不能解决问题,并且会导致另一个问题。要修复已删除的链接并设置密码(“ PWD”),请执行以下操作:
1)如上所述运行--skip-grant-tables。
如果不起作用,则在/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]部分中添加字符串skip-grant-tables。然后执行sudo服务mysql重新启动。
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是此答案的作者,我刚刚将其重新发布,因为它确实有帮助!
答案 12 :(得分:0)
答案 13 :(得分:-1)
更新mysql
表mysql.user中的空密码use mysql;
select host,user,password from mysql.user;
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;