我试图在我的服务器上部署Web应用程序,我得到这个mysql数据库异常“访问被拒绝用户'root'@'localhost'(使用密码:YES)(Mysql :: Error)”
我尝试使用_2542520从命令提示符访问数据库我能够执行所有数据库操作 .
什么是错误
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)
12 回答
您需要从localhost授予对root用户的访问权限 . 检查this ubuntu帮助
尝试使用
root
之类的..然后,您可以在使用后登录后检查不同的用户和主机
检查你是否在密码中留空格 .
将MySQL服务器从5.1.73升级到5.5.45后,我遇到了同样的错误还有另一种方法可以修复该错误 .
在我的情况下,我能够使用root密码连接到MySQL,但MySQL主动拒绝向任何用户授予GRANT PRIVILEGES;
然后输入你的MySQL root密码;
很可能在
mysql.user
表中根目录只有一条记录允许仅从localhost
(在我的情况下)连接,但默认情况下应该有两个root记录,一个用于localhost
,另一个用于127.0.0.1
;如果不存在,则使用
Host='127.0.0.1'
为root用户创建其他记录;mysql_upgrade -u -p
以查看是否一切正常 .我的应用程序使用的是Mura CMS,我遇到了这个问题 . 但是解决方案是我的mysql本地服务器和配置文件中的密码之间的密码不匹配 . 一旦我同步它们就行了 .
我通过删除MySQL创建的空用户解决了这个问题 . 我只有root用户和我自己的用户 . 我删除了其余的 .
更新 mysql DB中的 user 表 . 并设置一些空白的密码,我使用root用户,所以我为root用户设置密码 .
然后通过提供密码从ATG CIM再次尝试,它工作正常 .
http://i.stack.imgur.com/3Lchp.png
今天我在安装SugarCRM(一个免费的CRM)时遇到了这个问题 .
系统无法使用root用户连接到数据库 . 我可以明确地从控制台以root用户身份登录...那么问题是什么?
我发现在我的情况下,我得到了完全相同的错误,但那是因为密码直接从
$_POST
数据发送到mysql,换句话说,我的密码中的<
字符作为<
发送到mysql,这意味着密码错了 .其他一切都没有帮助 . mysql中的用户列表是正确的,包括匿名用户(出现在根条目之后) .
我google了很多,但没有找到我的问题的明确答案 . 我使用KeyPass生成一个强密码,可以在mysql workbench上成功使用它来连接,但不能从命令行连接 . 因此,我将psw更改为一个简单的psw,它在命令行上运行 . 我设法创建了一个能够从终端连接的强密码 . 所以我的建议是,在尝试所有类型的事情之前先尝试使用简单的密码 .
我正在运行UT,我开始收到错误消息 . 我不确定是什么问题 . 但是当我将INTELLIJ中的编码风格改为UTF8时,它再次开始工作 .
这是我的URL db.url = jdbc:mysql:// localhost:3306 / somedb?useUnicode = true&connectionCollation = utf8_general_ci&characterSetResults = utf8&characterEncoding = utf8
From my answer here, thought this might be useful:
我尝试了很多步骤来纠正这个问题 . 对于这个问题有很多可能解决方案的来源很难从废话中过滤出来 . 我终于找到了一个很好的解决方案here:
Step 1: Identify the Database Version
You'll see some output like this with MySQL:
Or output like this for MariaDB:
记下您正在运行的数据库和版本,稍后您将使用它们 . 接下来,您需要停止数据库,以便手动访问它 .
Step 2: Stopping the Database Server
要更改root密码,必须事先关闭数据库服务器 .
You can do that for MySQL with:
And for MariaDB with:
Step 3: Restarting the Database Server Without Permission Checking
如果在不加载有关用户权限的信息的情况下运行MySQL和MariaDB,则可以使用root权限访问数据库命令行而无需提供密码 . 这将允许你在不知情的情况下访问数据库 .
为此,您需要停止数据库加载存储用户权限信息的授权表 . 因为这有一点安全风险,所以您也应该跳过网络以防止其他客户端连接 .
Start the database without loading the grant tables or enabling networking:
此命令末尾的&符号将使此进程在后台运行,以便您可以继续使用终端 .
Now you can connect to the database as the root user, which should not ask for a password.
您将立即看到数据库shell提示符 .
MySQL Prompt
MariaDB Prompt
现在您具有root访问权限,您可以更改root密码 .
Step 4: Changing the Root Password
现在我们可以实际更改root密码 .
对于 MySQL 5.7.6 and newer 以及 MariaDB 10.1.20 and newer ,请使用以下命令:
对于 MySQL 5.7.5 and older 以及 MariaDB 10.1.20 and older ,请使用:
确保使用您选择的新密码替换
new_password
.Note: 如果
ALTER USER
命令没有通常表示更大的问题 . 但是,您可以尝试UPDATE ... SET
来重置root密码 .[IMPORTANT] This is the specific line that fixed my particular issue:
请记住在此之后重新加载授权表 .
在任何一种情况下,您都应该看到命令已成功执行的确认 .
密码已更改,因此您现在可以停止数据库服务器的手动实例并按原样重新启动它 .
Step 5: Restart the Database Server Normally
本教程进入了一些重新启动数据库的步骤,但我使用的唯一部分是:
For MySQL, use: $ sudo systemctl启动mysql
For MariaDB, use:
现在,您可以通过运行以下命令确认已正确应用新密码:
该命令现在应该提示新分配的密码 . 输入它,您应该按预期访问数据库提示 .
Conclusion
您现在可以恢复对MySQL或MariaDB服务器的管理访问权限 . 确保您选择的新root密码强大且安全,并将其保存在安全的地方 .
更新mysql表mysql.user中的空密码