如何通过JDBC连接TaurusDB数据库 本节介绍了JDBC连接的问题与处理方法。 通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。TaurusDB新实例默认开启SSL数据加密,SSL连接实现了数据加密功能,但同时会增加网络连接响应时间和CPU消耗,请评估对业务的性能影响,根据需要进行设置。 前提条件 用户需要具备以下技能: 熟悉计算机基础知识。 了解java编程语言。 了解JDBC基础知识。 使用SSL证书连接 使用SSL证书连接实例,即通过证书校验并连接数据库。 说明 以下提供的方式不适用于数据库用户的ssltype为x509的认证方式。 执行命令查看当前用户的ssltype值: select ssltype from mysql.user where user 'xxx'; 步骤 1 下载CA证书或捆绑包。 1. 在“实例管理”页面,单击实例名称进入“基本信息”页面。 2. 在“数据库信息”区域,单击“SSL”开关右侧的。 步骤 2 使用keytool工具通过CA证书生成truststore文件。 ./keytool.exe importcert alias file keystore storepass 表 变量说明 变量 说明 请替换为JDK或JRE安装路径的bin目录,例如C:Program Files (x86)Javajdk11.0.7bin。 请设置truststore文件的名称。建议设置为具有业务意义的名称,便于后续识别。 请替换为步骤1中下载解压后CA证书的名称,例如ca.pem。 请设置truststore文件的存放路径。 请设置truststore文件的密码。 代码示例(使用JDK安装路径下的keytool工具生成truststore文件): Owner: CNMySQLServer8.0.22AutoGeneratedCACertificate Issuer: CNMySQLServer8.0.22AutoGeneratedCACertificate Serial number: 1 Valid from: Thu Feb 16 11:42:43 EST 2017 until: Sun Feb 14 11:42:43 EST 2027 Certificate fingerprints: MD5: 18:87:97:37:EA:CB:0B:5A:24:AB:27:76:45:A4:78:C1 SHA1: 2B:0D:D9:69:2C:99:BF:1E:2A:25:4E:8D:2D:38:B8:70:66:47:FA:ED SHA256:C3:29:67:1B:E5:37:06:F7:A9:93:DF:C7:B3:27:5E:09:C7:FD:EE:2D:18:86:F4:9C:40:D8:26:CB:DA:95: A0:24 Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048bit RSA key Version: 1 Trust this certificate? [no]: y Certificate was added to keystore 步骤 3 通过JDBC连接TaurusDB数据库,代码中的JDBC链接格式如下: jdbc:mysql:// : / ? requireSSL &useSSL &verifyServerCertificate &trustCertificateKeyStoreUrlfile: &trustCertificateKeyStorePassword 表 参数说明 参数 说明 请替换为TaurusDB实例的IP地址。 说明 如果通过弹性云主机连接,“instanceip”是实例的“读写内网地址”。您可以在该实例“基本信息”页面的“网络信息”区域查看。 如果通过公网连接,“instanceip”为该实例已绑定的“弹性公网IP”,即读写公网地址。您可以在该实例““基本信息”页面的“网络信息”区域查看。 请替换为实例的数据库端口,默认为3306。说明您可以在该实例“基本信息”页面的“网络信息”区域查看。 请替换为连接实例使用的数据库名,默认为mysql。 requireSSL的值,用于设置服务端是否支持SSL连接。 取值如下: true:支持。 false:不支持。 说明 requireSSL与其他连接参数、sslMode之间的关系请参考下表。 useSSL的值,用于设置客户端是否使用SSL连接服务端。 取值如下: true:使用。 false:不使用。 说明 useSSL与其他连接参数、sslMode之间的关系请参考下表。 verifyServerCertificate的值,客户端是否校验服务端的证书。 取值如下: true:校验。 false:不校验。 说明 verifyServerCertificate与其他连接参数、sslMode之间的关系请参考下表。 请替换为步骤2中为truststore文件设置的存储路径。 password> 请替换为步骤2中为truststore文件设置的密码。 表 连接参数与SSL Mode的关系说明 useSSL requireSSL verifyServerCertificate sslMode false 不涉及 不涉及 DISABLED true false false PREFERRED true true false REQUIRED true 不涉及 true VERIFYCA 代码示例(连接TaurusDB数据库的java代码): import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; public class JDBCTest { static final String USER "xxx"; static final String PASS "xxx"; public static void main(String[] args) { Connection conn null; Statement stmt null; String url "jdbc:mysql:// : / ? requireSSLtrue&useSSLtrue&verifyServerCertificatetrue&trustCertificateKeyStoreUrlfile: &trustCertificateKeyStorePassword "; try { Class.forName("com.mysql.cj.jdbc.Driver"); conn DriverManager.getConnection(url, USER, PASS); stmt conn.createStatement(); String sql "show status like 'ssl%'"; ResultSet rs stmt.executeQuery(sql); int columns rs.getMetaData().getColumnCount(); for (int i 1; i < columns; i++) { System.out.print(rs.getMetaData().getColumnName(i)); System.out.print("t"); } while (rs.next()) { System.out.println(); for (int i 1; i < columns; i++) { System.out.print(rs.getObject(i)); System.out.print("t"); } } rs.close(); stmt.close(); conn.close(); } catch (SQLException se) { se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { // release resource .... } } }