

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 配置身份验证和 SSL
<a name="jdbc20-configure-authentication-ssl"></a>

为了防止数据遭到未经授权的访问，Amazon Redshift 数据存储要求所有连接都使用用户凭据进行身份验证。某些数据存储还要求通过安全套接字层 (SSL) 协议建立连接，无论是否使用单向身份验证。

Amazon Redshift JDBC 驱动程序版本 2.x 提供了对这些身份验证协议的完全支持。

驱动程序支持的 SSL 版本取决于您使用的 JVM 版本。有关每个 Java 版本支持的 SSL 版本的信息，请参阅 Java 平台组产品管理博客上的[诊断 TLS、SSL 和 HTTPS](https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https)。

用于连接的 SSL 版本是驱动程序和服务器都支持的最高版本，该版本在连接时确定。

配置 Amazon Redshift JDBC 驱动程序版本 2.x，以根据要连接到的 Redshift 服务器的安全要求对连接进行身份验证。

要对连接进行身份验证，您必须始终提供您的 Redshift 用户名和密码。根据服务器上是否启用或需要 SSL，您可能还需要将驱动程序配置为通过 SSL 进行连接。或者，您可能要使用单向 SSL 身份验证，以便客户端（驱动程序本身）验证服务器的身份。

在连接 URL 中将配置信息提供给驱动程序。有关连接 URL 的语法的更多信息，请参阅 [构建连接 URL](jdbc20-build-connection-url.md)。

*SSL* 表示 TLS/SSL，包括传输层安全性和安全套接字层。驱动程序支持 TLS/SSL 的行业标准版本。

## 配置 IAM 身份验证
<a name="jdbc20-configure-iam-authentication"></a>

如果您使用 IAM 身份验证连接到 Amazon Redshift 服务器，请将以下属性设置为数据来源连接字符串的一部分。

 有关 IAM 身份验证的更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](redshift-iam-authentication-access-control.md)。

要使用 IAM 身份验证，请使用以下连接字符串格式之一：


| 连接字符串 | 描述 | 
| --- | --- | 
|  `jdbc:redshift:iam:// [host]:[port]/[db]`  |  常规连接字符串。驱动程序从主机推断 ClusterID 和区域。  | 
|  `jdbc:redshift:iam:// [cluster-id]: [region]/[db]`  |  在已知 ClusterID 和区域的情况下，驱动程序将检索主机信息。  | 
|  `jdbc:redshift:iam:// [host]/[db]`  |  驱动程序默认为端口 5439，并从主机推断 ClusterID 和区域。根据您在创建、修改或迁移集群时选择的端口，允许访问所选端口。  | 

## 指定配置文件
<a name="jdbc20-aws-credentials-profiles"></a>

如果您使用 IAM 身份验证，则可以在配置文件名称下指定任何其他必需或可选的连接属性。通过这样做，您可以避免将某些信息直接放入连接字符串中。您可以使用 Profile 属性在连接字符串中指定配置文件名称。

配置文件可以添加到 AWS 凭证文件。此文件的默认位置为：`~/.aws/credentials`

您可以通过在以下环境变量中设置路径更改默认值：`AWS_CREDENTIAL_PROFILES_FILE`

 有关配置文件的更多信息，请参阅 *适用于 Java 的 AWS SDK* 中的[使用 AWS 凭证](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html)。

## 使用实例配置文件凭证
<a name="jdbc20-instance-profile-credentials"></a>

如果您在与 IAM 角色关联的 Amazon EC2 实例上运行应用程序，则可以使用实例配置文件凭证进行连接。

为此，请使用上表中的 IAM 连接字符串格式之一，并将 dbuser 连接属性设置为您正要以其身份连接的 Amazon Redshift 用户名。

有关实例配置文件的更多信息，请参阅《IAM 用户指南》**中的[访问控制](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。

## 使用凭证提供程序
<a name="jdbc20-aws-credentials-provider"></a>

驱动程序还支持来自以下服务的凭证提供程序插件：
+ AWS IAM Identity Center
+ Active Directory 联合身份验证服务 (ADFS)
+ JSON Web Token (JWT) 服务
+ Microsoft Azure Active Directory (AD) 服务和浏览器 Microsoft Azure Active Directory (AD) 服务
+ Okta 服务
+ PingFederate 服务 
+ 适用于 SAML 服务（如 Okta、Ping 或 ADFS）的浏览器 SAML

如果您使用上述服务之一，则连接 URL 需要指定以下属性：
+ **Plugin\$1Name** – 凭证提供程序插件类的完全限定类路径。
+ **IdP\$1Host：**– 您用于对 Amazon Redshift 进行身份验证的服务的主机。
+ **IdP\$1Port** – 身份验证服务的主机侦听的端口。Okta 不需要。
+ **User** – idp\$1host 服务器的用户名。
+ **Password** – 与 idp\$1host 用户名关联的密码。
+ **DbUser** – 您连接时使用的 Amazon Redshift 用户名。
+ **SSL\$1Insecure** – 指示是否应验证 IDP 服务器证书。
+ **Client\$1ID** – 与 Azure AD 门户中的用户名关联的客户端 ID。仅用于 Azure AD。
+ **Client\$1Secret** – 与 Azure AD 门户中的客户端 ID 关联的客户端密钥。仅用于 Azure AD。
+ **IdP\$1Tenant** – 适用于您的 Amazon Redshift 应用程序的 Azure AD 租户 ID。仅用于 Azure AD。
+ **App\$1ID** – 您的 Amazon Redshift 应用程序的 Okta 应用程序 ID。仅适用于 Okta。
+ **应用程序名称** – 您的 Amazon Redshift 应用程序的可选 Okta 应用程序名称。仅适用于 Okta。
+ **Partner\$1SPID** – 可选的合作伙伴 SPID（服务提供商 ID）值。仅用于 PingFederate。
+ **Idc\$1Region** – AWS IAM Identity Center 实例所在的 AWS 区域。仅用于 AWS IAM Identity Center。
+ **Issuer\$1Url** – AWS IAM Identity Center 服务器的实例端点。仅用于 AWS IAM Identity Center。

如果您将浏览器插件用于这些服务之一，则连接 URL 还可以包括：
+ **Login\$1URL** – 通过浏览器插件使用安全断言标记语言 (SAML) 或 Azure AD 服务时，身份提供者网站上的资源的 URL。如果使用浏览器插件，则此参数是必需的。
+ **Listen\$1Port** – 通过浏览器插件使用 SAML、Azure AD 或 AWS IAM Identity Center 服务时，驱动程序用于从身份提供者获取 SAML 响应的端口。
+ **IdP\$1Response\$1Timeout** – 通过浏览器插件使用 SAML、Azure AD 或 AWS IAM Identity Center 服务时，驱动程序等待身份提供者的 SAML 响应的时间（以秒为单位）。

有关其他连接字符串属性的信息，请参阅[JDBC 驱动程序版本 2.x 配置的选项](jdbc20-configuration-options.md)。

# 仅使用用户名和密码
<a name="jdbc20-authentication-username-password"></a>

如果要连接的服务器不使用 SSL，则只需提供 Redshift 用户名和密码即可对连接进行身份验证。

**仅使用您的 Redshift 用户名和密码配置身份验证**

1. 将 `UID` 属性设置为您的 Redshift 用户名，以便访问 Amazon Redshift 服务器。

1. 将 PWD 属性设置为与您的 Redshift 用户名相对应的密码。

# 在不验证身份的情况下使用 SSL
<a name="jdbc20-use-ssl-without-identity-verification"></a>

如果要连接的服务器使用 SSL 但不需要身份验证，则可以将驱动程序配置为使用非验证 SSL 出厂设置。

**要在不进行身份验证的情况下配置 SSL 连接**

1. 将 `UID` 属性设置为您的 Redshift 用户名，以便访问 Amazon Redshift 服务器。

1. 将 `PWD` 属性设置为与您的 Redshift 用户名相对应的密码。

1. 将 `SSLFactory` 属性设置为 `com.amazon.redshift.ssl.NonValidatingFactory`。

# 使用单向 SSL 身份验证
<a name="jdbc20-use-one-way-SSL-authentication"></a>

如果要连接的服务器使用 SSL 并且具有证书，则您可以将驱动程序配置为使用单向身份验证来验证服务器的身份。

单向身份验证需要签名、受信任的 SSL 证书来验证服务器的身份。您可以将驱动程序配置为使用特定证书或访问包含相应证书的 TrustStore。如果您未指定证书或 TrustStore，则驱动程序将使用默认的 Java TrustStore（通常为 `jssecacerts` 或 `cacerts`）。

**要配置单向 SSL 身份验证**

1. 将 UID 属性设置为您的 Redshift 用户名，以便访问 Amazon Redshift 服务器。

1. 将 PWD 属性设置为与您的 Redshift 用户名相对应的密码。

1. 将 SSL 属性设置为 true。

1. 将 SSLRootCert 属性设置为根 CA 证书的位置。

1. 如果您未使用默认的 Java TrustStore 之一，请执行以下操作之一：
   + 要指定服务器证书，请将 SSLRootCert 属性设置为证书的完整路径。
   + 要指定 TrustStore，请执行以下操作：

     1. 使用 keytool 程序将服务器证书添加到要使用的 TrustStore 中。

     1. 指定使用驱动程序启动 Java 应用程序时要使用的 TrustStore 和密码。例如：

        ```
        -Djavax.net.ssl.trustStore=[TrustStoreName]
        -Djavax.net.ssl.trustStorePassword=[TrustStorePassword]
        -Djavax.net.ssl.trustStoreType=[TrustStoreType]
        ```

1. 请选择一种：
   + 要验证证书，请将 SSLMode 属性设置为 verify-ca。
   + 要验证证书并确认证书中的主机名，请将 SSLMode 属性设置为 verify-full。