JDBC Hibernate - Mysql 连接错误

Posted

技术标签:

【中文标题】JDBC Hibernate - Mysql 连接错误【英文标题】:JDBC Hibernate - Mysql Connection Error 【发布时间】:2012-03-07 09:19:53 【问题描述】:

我的 Ubuntu 11.10 桌面上有一个本地 mysql 服务器。主机名 = 本地主机;用户名 = 根;密码=根;数据库名称 = CBS。我真的很困惑,因为当我使用terminalmysql administratormysql query browser 访问 mysql 时,我使用了上面提到的那些身份验证,一切正常。我的问题是当我在我的 Java 应用程序中配置我的 jdbc.properties 时出现此错误:

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; SQL [???] 的未分类 SQLException; SQL状态[28000];错误代码[1045];用户'root'@'localhost'的访问被拒绝(使用密码:YES);嵌套异常是 java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)

我的配置文件,jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/CBS
jdbc.username=root  
jdbc.password=root

顺便说一句,我将使用本地服务器的原因是因为我们的主服务器关闭了,所以我必须使用本地 mysql 来继续我的项目。请帮助我...提前致谢。

【问题讨论】:

使用 mysql 管理员(或其他工具)时您的主机名是什么?正如下面提到的 duffymo,您可能会遇到与该用户连接到 localhost 的授权问题。在您的消息的第一部分中,我没有看到有关主机名的任何提及。 您是否使用根凭据运行您的“java 应用程序”?当你的应用程序运行时 - 使用“ps -ef | grep ”检查它并查看哪个用户正在运行它 - 如果它不是“root”,你就会在那里找到答案。 【参考方案1】:

您的框架很可能以127.0.0.1 身份登录到您的本地数据库。如果您没有定义适当的域范围凭据,这将在 MySQL 中产生登录问题。试试这个来验证:

mysql -uroot -proot
SELECT * from mysql.user WHERE user = 'root';

如果没有 'root'@'127.0.0.1' 则已发现问题并进行补救,请执行以下两项操作之一:

    在“127.0.0.1”处为“root”定义域范围的凭据。 为“root”定义通配符域范围的凭据,这样您就可以 使用这些凭据从多个位置登录您的 MySQL。

这是第二个的例子:

mysql -uroot -proot

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

附带说明,我绝对建议您为您的用户 ID 和密码使用更有创意的东西。特别是如果您为您的服务器启用了 TCP 套接字。

【讨论】:

当我运行命令 SELECT * from users WHERE user = 'root';我将使用什么数据库来查看我是否有'root'@'127.0.0.1'?我是新手。 其实命令是select * from mysql.user where user = 'root';。我更新了我的答案。 我看到了很多随机字符,例如“+”和“-”。但是我看到了这一行:|本地主机 |根 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |是 | Y. 这是否意味着我有一个根? 呃,帮我个忙,在 mysql select user, host from user 中执行这个,告诉我用户“root”显示了多少行,以及这些行的主机字段是什么。 我有 8 行。我看到 user = root 和 host = localhost。【参考方案2】:

您可能必须授予访问数据库的权限。

查看 MySQL 文档,了解如下内容:

create database pmt;
create user pmt identified by 'pmt';
grant all on pmt.* to 'pmt'@'%';

“pmt”只是上面的一个例子。我碰巧将数据库名称、用户名和密码都设置为相同的。我不建议将其作为最佳实践。这只是我为一些本地开发所做的事情。

我个人不喜欢授予对任何应用程序的 root 访问权限。即使是玩具应用程序,我也不会使用 root 用户名和密码。创建新用户并授予适当的权限并不需要太多努力。

【讨论】:

执行这些命令后是否需要重新启动服务器?

以上是关于JDBC Hibernate - Mysql 连接错误的主要内容,如果未能解决你的问题,请参考以下文章

我的 spring+hibernate 应用程序没有关闭 jdbc 连接

另一个jdbc:mysql没有合适的驱动程序,Spring + Hibernate [重复]

使用 Hibernate、Spring 和 JDBC 配置 SSL 证书

初识Hibernate

Hibernate连接mysql数据库并自动创建表

mysql异常后连接终止