更新时间:2023-01-09 GMT+08:00

配置JDBC连接使用IAM认证方式连接集群

当使用JDBC应用程序连接集群时,您可以在JDBC连接中配置IAM用户名及其用户凭证等信息,在连接数据库时系统就会自动生成临时数据库凭证,从而成功连接到数据库。

当前只支持GaussDB(DWS)1.3.1以上版本(包括1.3.1版本)的集群及其配套的JDBC驱动程序使用IAM认证方式访问数据库。请先参考下载JDBC或ODBC驱动下载JDBC驱动程序。

配置JDBC连接参数

表1 数据库连接参数

参数

描述

url

gsjdbc4.jar/gsjdbc200.jar数据库连接描述符。JDBC接口不提供重试连接的能力,您需要在业务代码中实现重试连接的处理。url示例如下:

jdbc:dws:iam://dws-IAM-demo:ae-ad-1/gaussdb?AccessKeyID=XXXXXXXXXXXXXXXXXXXX&SecretAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&DbUser=user_test&AutoCreate=true

JDBC URL参数说明:

  • jdbc:dws:iam是URL格式的前缀。
  • dws-IAM-demo为数据库集群名称。
  • ae-ad-1是集群所在的区域。

    有关GaussDB(DWS) 的区域信息,请参考地区和终端节点

  • gaussdb是要连接的数据库名。
  • AccessKeyID/SecretAccessKey为参数DbUser指定的IAM用户所对应的访问密钥ID和秘密访问密钥。
  • DbUser请设置为IAM用户名,注意,当前版本暂不支持IAM用户名中含有中划线的情况。
    • 如果数据库中已存在DbUser指定的用户,则临时用户凭证具有与现有用户相同的权限。
    • 如果数据库中不存在DbUser指定的用户,且AutoCreate参数值为true,则自动创建一个以DbUser参数值作为用户名的新用户,默认创建的用户为数据库普通用户。
  • AutoCreate可以不设置,默认为false。该参数表示是否在数据库中自动创建一个以DbUser参数值作为用户名的数据库用户。
    • true表示自动创建。如果用户已存在则不会再创建。
    • false表示不会自动创建。如果数据库中不存在DbUser指定的用户名将返回失败。

info

数据库连接属性。常用的属性如下:

  • ssl:Boolean类型。表示是否使用SSL连接。
  • loglevel:Integer类型。为LogStream或LogWriter设置记录进DriverManager当前值的日志信息量。

    目前支持org.postgresql.Driver.DEBUG和org.postgresql.Driver.INFO。值为1时,表示只打印org.postgresql.Driver.INFO,将记录非常少的信息。值大于等于2时,表示打印org.postgresql.Driver.DEBUG和org.postgresql.Driver.INFO,将产生详细的日志信息。默认值为0,表示不打印日志。

  • charSet:String类型。表示在向数据库发送数据或从数据库接收数据时使用到的字符集。
  • prepareThreshold:Integer类型。用于确定在转换为服务器端的预备语句之前,要求执行方法PreparedStatement的次数。缺省值是5。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//以下用例以gsjdbc4.jar为例
//以下代码将获取数据库连接操作封装为一个接口,可通过给定集群所在的区域、集群名称、AccessKeyID、SecretAccessKey及对应的IAM用户名来连接数据库。
public static Connection GetConnection(String clustername, String regionname, String AK, String SK, String username) 
    {
        //驱动类。
        String driver = "org.postgresql.Driver";
        //数据库连接描述符。
        String sourceURL = "jdbc:dws:iam://" + clustername + ":" + regionname + "/gaussdb?" + "AccessKeyID=" + AK + "&SecretAccessKey=" + SK + "&DbUser=" + username + "&autoCreate=true";
        
        Connection conn = null;
        
        try
        {
            //加载驱动。
            Class.forName(driver);
        }
        catch( Exception e )
        {
             return null;
        }
        
        try
        {
            //创建连接。
            conn = DriverManager.getConnection(sourceURL);
            System.out.println("Connection succeed!");
         }
        catch(Exception e)
        {
             return null;
        }
        
        return conn;
    };