暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 连接数据库

墨天轮 2019-10-12
2804

连接数据库

在创建数据库连接之后,才能使用它来执行SQL语句操作数据。

远程接入数据库之前,需要在配置文件zengine.ini中设置LSNR_IP和LSNR_PORT侦听的IP地址和端口号。一次最多可以设置8个侦听的IP地址,IP地址中间通过逗号隔开。

函数原型

使用JDBC创建数据库连接,请使用以下函数。

DriverManager.getConnection(String url, String user, String password);

参数说明

表1 数据库连接参数

参数

描述

url

数据库连接描述符格式如下:

jdbc:zenith:@ip:port[?key=value[&key=value]..]

说明:
  • ip为数据库服务器名称。
  • port为数据库服务器端口。
  • URL连接属性通过&符号进行分割,每个属性是一个key=value对
  • URL中的KEY值说明见表2。

user

数据库用户。

password

数据库用户的密码。

表2 url中支持的key值说明

KEY值

描述

loginTimeout

建立数据库连接超时时间(单位:秒)。

socketTimeout

连接执行命令与服务端通信套接字超时时间(单位:秒)。

useSSL

是否使用SSL建立连接。默认值为true,使用SSL建立连接。此参数为客户端是否使用SSL的总开关,只有设置useSSL为true时,其他SSL设置才会生效。

说明:

如果客户端建立连接时指定useSSL=true,但服务端不支持SSL,客户端会选择与该服务器建立普通连接。

requireSSL

是否强制使用SSL建立连接。

  • 默认值false,不强制使用SSL。
  • true:强制使用SSL。如果服务端不支持SSL,则建立连接时会报错。

verifyServerCertificate

是否校验服务端证书。默认值为false,不校验。

isRevocationEnabled

是否开启校验crl。默认值为false,不校验。

sslCipher

设置SSL秘钥算法套件,支持的算法套件如下:

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
说明:
  • 当前GaussDB 100 JDBC支持两种连接方式,普通TCP的方式和SSL的方式。其中SSL方式又分为单向认证和双向认证:
  • 如果SSL开关打开,但JDBC侧没有配置证书信息,JDBC会使用单向认证的方式连接数据库。
  • 当jdbc侧也配置了证书文件,且SSL开关打开,JDBC会使用更加安全的双向认证连接数据库。

JDBC配置证书的方式当前支持两种:

  • 在应用程序JVM启动时,使用java命令行参数(推荐),如:-Djavax.net.ssl.trustStore=path_to_truststore_file
  • 直接在代码中设置系统参数,如:System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
表3 ssl双向认证使用到的环境变量说明:

JVM环境变量

变量说明

javax.net.ssl.keyStore

SSL keyStore文件位置,keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。

javax.net.ssl.keyStoreType

keyStore的类型,默认值: JKS

javax.net.ssl.keyStorePassword

SSL keyStore的密码

javax.net.ssl.trustStore

SSL trustStore文件位置,truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书

javax.net.ssl.trustStoreType

trustStore的类型,默认值:JKS

javax.net.ssl.trustStorePassword

SSL trustStore的密码

示例-连接数据库

//以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。 public static Connection GetConnection(String username, String passwd) { //驱动类。 String driver = "com.huawei.gauss.jdbc.ZenithDriver"; //数据库连接描述符。 String sourceURL = "jdbc:zenith:@10.255.255.1:1888"; Connection conn = null; try { //加载数据库驱动。 Class.forName(driver).newInstance(); } catch (Exception e) { e.printStackTrace(); return null; } try { //创建数据库连接。 //getConnection(String url, String user, String password) conn = DriverManager.getConnection(sourceURL,username,passwd); System.out.println("Connection succeed!"); } catch (Exception e) { e.printStackTrace(); return null; } return conn; };

配置JDBC客户端SSL证书

配置JDBC客户端SSL证书的操作步骤如下。配置后,如果在连接字符串中指定useSSL=true,则JDBC会使用SSL双向认证来建立连接。

  • 生成并配置truststore。

    • 转换自认证证书cacert.pem,以生成java可用的truststore证书。

      自认证证书cacert.pem的生成方式请参见用SSL进行安全的TCP/IP连接章节的创建自认证书。

    • 使用java keytool(一般在JDK或JRE的bin目录下)工具将cacert.pem转换成truststore。
      shell> keytool -importcert -alias GaussCACert -file cacert.pem -keystore truststore -storepass mypassword
    • 配置刚创建的truststore。

      支持以下两种配置方式。

      • 使用java命令行参数的方式。
        -Djavax.net.ssl.trustStore=path_to_truststore_file -Djavax.net.ssl.trustStorePassword=mypassword
      • 设置系统参数的方式。
        System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file"); System.setProperty("javax.net.ssl.trustStorePassword","mypassword");

  • 生成并配置keystore。

    • 转换客户端证书文件(client.crt)和客户端私钥(client.key),以生成java可用的keystore文件。

      自认证证书cacert.pem的生成方式请参见用SSL进行安全的TCP/IP连接章节的创建自认证书。

    • 使用openssl工具将客户端证书和私钥文件转化为PKCS #12格式的文件。
      shell> openssl pkcs12 -export -in client.crt -inkey client.key -name "gaussclient" -passout pass:mypassword -out client-keystore.p12
    • 使用keytool工具将上一步生成的文件转化为java keystore。
      shell> keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass mypassword -destkeystore keystore -deststoretype JKS -deststorepass mypassword
    • 配置刚创建的keystore。

      支持以下两种配置方式。

      • 使用java命令行参数的方式
        -Djavax.net.ssl.keyStore=path_to_keystore_file -Djavax.net.ssl.keyStorePassword=mypassword
      • 设置系统参数的方式
        System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file"); System.setProperty("javax.net.ssl.keyStorePassword","mypassword");

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论