更新时间:2025-10-23 gmt 08:00

通过jdbc连接rds for mysql实例-j9九游会登录

通过jdbc连接实例的方式有无需下载ssl证书连接和用户下载ssl证书连接两种,其中使用ssl证书连接通过了加密功能,具有更高的安全性。rds for mysql新实例默认关闭ssl数据加密,开启ssl请参考设置ssl数据加密ssl连接实现了数据加密功能,但同时也会增加网络连接响应时间和cpu消耗,不建议开启ssl数据加密。

前提条件

用户需要具备以下技能:

  • 熟悉计算机基础知识。
  • 了解java编程语言。
  • 了解jdbc基础知识。

操作步骤

使用ssl证书连接实例,即通过证书校验并连接数据库。rds for mysql实例不支持x509认证方式。

  1. 下载ca证书或捆绑包。
    1. “实例管理”页面,单击实例名称进入“概览”页面。
    2. 单击“ssl”处的“下载”。
  2. 使用keytool工具通过ca证书生成truststore文件。
     ./keytool.exe -importcert -alias  -­file  -keystore  -storepass 
    表1 变量说明

    变量

    说明

    请替换为jdk或jre安装路径的bin目录,例如c:\program files (x86)\java\jdk­11.0.7\bin。

    请设置truststore文件的名称。建议设置为具有业务意义的名称,便于后续识别。

    请替换为1中下载解压后ca证书的名称,例如ca.pem。

    请设置truststore文件的存放路径。

    请设置truststore文件的密码。

    代码示例(使用jdk安装路径下的keytool工具生成truststore文件):

    owner:  cn=mysql_server_5.7.17_auto_generated_ca_certificate
    issuer: cn=mysql_server_5.7.17_auto_generated_ca_certificate 
    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: 2048-bit rsa key 
         version: 1
         trust this certificate? [no]: y
         certificate was added to keystore
  3. 通过jdbc连接mysql数据库,代码中的jdbc连接格式如下:
    jdbc:mysql://:/?param1=value1¶m2=value2¶m3=value3¶m4=value4¶m5=value5¶m6=value6
    表2 参数说明

    参数

    说明

    请替换为实例的ip地址。

    说明:
    • 如果通过弹性云服务器连接,“instance_ip”是实例的“内网地址”。您可以在该实例的“连接管理”页面查看。
    • 如果通过公网连接,“instance_ip”为该实例已绑定的“弹性公网ip”。您可以在该实例的“连接管理”页面查看。

    请替换为实例的数据库端口,默认为3306。

    说明:

    您可以在该实例的“连接管理”页面查看。

    请替换为连接实例使用的数据库名,默认为mysql。

    requiressl,用于设置服务端是否支持ssl连接。取值如下:

    • true:支持。
    • false:不支持。
    说明:

    requiressl与其他连接参数、sslmode之间的关系请参考表3

    usessl,用于设置客户端是否使用ssl连接服务端。取值如下:

    • true:使用。
    • false:不使用。
      说明:

      usessl与其他连接参数、sslmode之间的关系请参考表3

    verifyservercertificate,客户端是否校验服务端的证书。取值如下:

    • true:校验。
    • false:不校验。
      说明:

      verifyservercertificate与其他连接参数、sslmode之间的关系请参考表3

    trustcertificatekeystoreurl,取值为file:

    请替换为2中truststore文件设置的存储路径。

    trustcertificatekeystorepassword,取值为2中truststore文件设置的密码。

    allowmultiqueries,用于设置是否支持多语句执行。

    设置为true:允许应用代码把多个sql用分号拼接,批处理sql语句。

    表3 连接参数与sslmode的关系说明

    usessl

    requiressl

    verifyservercertificate

    sslmode

    false

    不涉及

    不涉及

    disabled

    true

    false

    false

    preferred

    true

    true

    false

    required

    true

    不涉及

    true

    verify_ca

    代码示例(连接mysql数据库的java代码):

    import java.sql.connection; 
    import java.sql.drivermanager; 
    import java.sql.resultset; 
    import java.sql.statement;
    import java.sql.sqlexception; 
    // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
    // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)example_username_env和example_password_env。
    public class jdbctest { 
       
        string user = system.getenv("example_username_env");         
        string pass = system.getenv("example_password_env");
        public static void main(string[] args) {
            connection conn = null; 
            statement stmt = null;
           // url中所需的连接参数根据实际情况配置
           string url = "jdbc:mysql://:/?param1=value1¶m2=value2";
     
            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 .... 
            } 
        } 
    }

该方式不对服务端进行证书校验,用户无需下载ssl证书。

  1. 通过jdbc连接rds for mysql数据库实例,代码中的jdbc连接格式如下:
    jdbc:mysql://:/?usessl=false¶m1=value1
    表4 变量说明

    变量

    说明

    请替换为实例的ip地址。

    说明:
    • 如果通过弹性云服务器连接,“instance_ip”是实例的“内网地址”。您可以在该实例的“连接管理”页面查看。
    • 如果通过公网连接,“instance_ip”为该实例已绑定的“弹性公网ip”。您可以在该实例的“连接管理”页面查看。

    请替换为实例的数据库端口,默认为3306。

    说明:

    您可以在该实例的“连接管理”页面查看。

    请替换为连接实例使用的数据库名,默认为mysql。

    allowmultiqueries,用于设置是否支持多语句执行。

    设置为true:允许应用代码把多个sql用分号拼接,批处理sql语句。

    代码示例(连接mysql数据库的java代码):

    import java.sql.connection;
    import java.sql.drivermanager;
    import java.sql.resultset;
    import java.sql.statement;
    // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
    // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)example_username_env和example_password_env。
    public class myconntest {
    	final public static void main(string[] args) {
    		connection conn = null;
                    // url中所需的连接参数根据实际情况配置
                    string url = "jdbc:mysql://:/?param1=value1¶m2=value2";
                    string user = system.getenv("example_username_env");         
                    string pass = system.getenv("example_password_env");
    		try {
    			class.forname("com.mysql.jdbc.driver");
    			
                            conn = drivermanager.getconnection(url,user,pass);
    			system.out.println("database connected");
    			statement stmt = conn.createstatement();
    			resultset rs = stmt.executequery("select * from mytable where columnfoo = 500");
    			while (rs.next()) {
    				system.out.println(rs.getstring(1));
    			}
    			rs.close();
    			stmt.close();
    			conn.close();
    		} catch (exception e) {
    			e.printstacktrace();
    			system.out.println("test failed");
    		} finally {
    			// release resource ....
    		}
    	}
    }

常见问题

相关文档

网站地图