云服务器内容精选

  • 概述 GaussDB (DWS)提供了使用 IAM 认证方式访问数据库的功能。当使用JDBC应用程序连接集群时,您可以在JDBC连接中配置IAM用户名及其用户凭证等信息,在连接数据库时系统就会自动生成临时数据库凭证,从而成功连接到数据库。 当前仅支持1.3.1及以上版本的集群及其配套的JDBC驱动程序使用IAM认证方式访问数据库。请先参考下载JDBC或ODBC驱动下载JDBC驱动程序。 IAM用户凭证有密码和访问密钥(Access Key ID和Secret Access Key,简称AK和SK)两种类型,您要为JDBC连接提供IAM访问密钥。 如需使用IAM用户凭证访问数据库,必须先给您的IAM用户授予DWS Database Access权限,同时拥有DWS Administrator和DWS Database Access权限的用户,才能基于IAM用户生成临时数据库用户凭证以连接GaussDB(DWS)数据库。 需要注意的是,DWS Database Access是用户组级别的权限,您可以通过为用户组授权并将用户加入到用户组的方式,使用户具有用户组中的权限。 在IAM中,只有admin用户组的用户可以管理用户。如需给IAM用户授权,您的IAM账号必须属于IAM的admin用户组,否则,请联系IAM账号管理员帮您授权。 使用IAM用户凭证访问数据库的流程如下: 授予IAM用户DWS Database Access权限 创建IAM用户凭证 配置JDBC连接使用IAM认证方式连接集群
  • 创建IAM用户凭证 用户可以登录管理控制台创建访问密钥,如果您已经创建过了,也可以使用已有的访问密钥。 登录管理控制台。 将鼠标移到右上角的用户名,单击“我的凭证”。 再单击“管理访问密钥”页签,可以查看已有的访问密钥,也可以单击“新增访问密钥”进行创建。 访问密钥是IAM身份认证的重要凭证,只有在新增访问密钥时,用户才可以下载到含有Access Key ID(AK)和Secret Access Key(SK)的密钥文件,在管理控制台只能查看到Access Key ID,如果您未曾下载过该密钥文件,请联系您的管理员进行获取,或者重新创建。 每个用户最多可创建2个访问密钥,有效期为永久。为了账号安全性,建议您定期更换并妥善保存访问密钥。
  • 配置JDBC连接使用IAM认证方式连接集群 配置JDBC连接参数 表1 数据库连接参数 参数 描述 url gsjdbc4.jar/gsjdbc200.jar数据库连接描述符。JDBC接口不提供重试连接的能力,您需要在业务代码中实现重试连接的处理。url示例如下: jdbc:dws:iam://dws-IAM-demo:cn-north-4/gaussdb?AccessKeyID=XXXXXXXXXXXXXXXXXXXX&SecretAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&DbUser=user_test&AutoCreate=true JDBC URL参数说明: jdbc:dws:iam是URL格式的前缀。 dws-IAM-demo为数据库集群名称。 cn-north-4是集群所在的区域。JDBC会根据所填写区域,访问对应DWS服务,向所在集群下发IAM证书,用于IAM用户认证。DWS服务地址已内置在JDBC配置文件中。 有关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 //以下用例以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 + "/postgresgaussdb?" + "AccessKeyID=" + AK + "&SecretAccessKey=" + SK + "&DbUser=" + username + "&autoCreate=true"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } catch (ClassNotFoundException e) { return null; } try { //创建连接。 conn = DriverManager.getConnection(sourceURL); System.out.println("Connection succeed!"); } catch (SQLException e) { return null; } return conn; }