连接数据库
在创建数据库连接之后,才能使用它来执行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");
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论