Error querying database. Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
时间: 2024-10-04 22:00:20 浏览: 49
当你遇到 "Error querying database. Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed" 这样的错误时,这通常是在数据库连接过程中遇到了安全问题。SQL NonTransientConnectionException 提示存在一个非临时性的连接问题,而 "Public Key Retrieval is not allowed" 则意味着系统无法获取或验证用于加密通信(如SSL/TLS)的公共密钥。
可能是以下几个原因导致:
1. **服务器配置**:数据库服务器可能设置了严格的权限,不允许从客户端直接获取公钥信息。你需要检查服务器的SSL设置,确保允许连接的客户端证书。
2. **证书问题**:客户端使用的证书可能无效或未正确安装。确保客户端证书是最新的,并且数据库服务器已经信任了这个证书。
3. **网络代理**:有些防火墙或网络安全设备可能会阻止公钥的传输,需要在这些设备上配置正确的规则。
4. **代码错误**:如果你正在编写应用程序,可能是代码中处理连接的部分有误,比如没有正确设置证书路径或忽略了一些必要的SSL配置。
解决这个问题需要定位到具体的应用场景,根据上述情况排查并修复相应的配置。如果需要进一步帮助,可以提供更具体的日志信息和上下文。
相关问题
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed ### The error may exist in mysql/user/mappers/usermapper.xml ### The error may involve mysql.user.mappers.usermapper.selectAll ### The error occurred while executing a query ### Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) at com.sun.proxy.$Proxy4.selectAll(Unknown Source) at org.example.main2.main(main2.java:25) Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) at java.sql.DriverManager.getConnection(Driv
这个问题是因为你正在使用过时的MySQL驱动程序。新的驱动程序类是`com.mysql.cj.jdbc.Driver`。新的驱动程序类会自动通过SPI进行注册,不需要手动加载驱动程序类。此外,你遇到的错误是“Public Key Retrieval is not allowed”,这可能是由于MySQL连接配置的问题引起的。你可以尝试在连接URL中添加`allowPublicKeyRetrieval=true`来解决此问题。例如:
```java
String url = "jdbc:mysql://localhost:3306/database?allowPublicKeyRetrieval=true";
```
请确保将`localhost:3306`替换为您的MySQL服务器主机和端口,`database`替换为您要连接的数据库名称。
Error querying database. Cause: java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
根据提供的引用内容,以下是解决"Error querying database. Cause: java.sql.SQLNonTransientConnectionException: Could not create connection to database server."错误的一种方法:
1. 检查数据库连接配置:确保数据库连接的URL、用户名和密码正确,并且数据库服务器正在运行。
```java
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
```
2. 检查数据库驱动程序:确保已正确加载数据库驱动程序。
```java
Class.forName("com.mysql.jdbc.Driver");
```
3. 检查数据库服务器状态:确保数据库服务器正在运行,并且可以通过网络访问。
4. 检查数据库连接池配置:如果使用连接池管理数据库连接,请确保连接池的配置正确,并且连接池中有足够的可用连接。
5. 检查防火墙设置:如果数据库服务器位于另一台机器上,请确保防火墙允许从应用程序服务器访问数据库服务器的网络连接。
6. 检查数据库权限:确保应用程序使用的数据库用户具有足够的权限来连接和操作数据库。
阅读全文