

# Microsoft SQL Server 安全性
安全性

Microsoft SQL Server 数据库引擎使用基于角色的安全性。您在创建数据库实例时指定的主用户名是 SQL Server 身份验证登录名，该登录名是 `processadmin`、`public` 和 `setupadmin` 固定服务器角色的成员。

任何创建数据库的用户都将被分配该数据库的 db\$1owner 角色，并将拥有除用于备份外的所有数据库级别的权限。Amazon RDS 会为您管理备份。

以下服务器级别的角色在 Amazon RDS for SQL Server 中不可用：
+ bulkadmin
+ dbcreator
+ diskadmin
+ securityadmin
+ serveradmin
+ sysadmin

以下服务器级别的权限在 RDS for SQL Server 数据库实例上不可用：
+ 更改任何数据库
+ ALTER ANY EVENT NOTIFICATION
+ ALTER RESOURCES
+ ALTER SETTINGS（您可以使用数据库参数组 API 操作来修改参数；有关更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)） 
+ AUTHENTICATE SERVER
+ CONTROL\$1SERVER
+ CREATE DDL EVENT NOTIFICATION
+ CREATE ENDPOINT
+ CREATE SERVER ROLE
+ CREATE TRACE EVENT NOTIFICATION
+ 删除任何数据库
+ EXTERNAL ACCESS ASSEMBLY
+ SHUTDOWN（您可转而使用 RDS 重启选项）
+ UNSAFE ASSEMBLY
+ ALTER ANY AVAILABILITY GROUP
+ CREATE ANY AVAILABILITY GROUP

## Microsoft SQL Server 数据库实例的 SSL 支持
SSL 支持

可使用 SSL 对应用程序和运行 Microsoft SQL Server 的 Amazon RDS 数据库实例之间的连接进行加密。您还可强制至数据库实例的所有连接使用 SSL。如果强制所有连接使用 SSL，则对客户端是透明的，客户端不需要为使用 SSL 而执行任何操作。

在所有 Amazon 区域以及所有支持的 SQL Server 版本中支持 SSL。有关更多信息，请参阅 [将 SSL 与 Microsoft SQL Server 数据库实例结合使用](SQLServer.Concepts.General.SSL.Using.md)。

# 将 SSL 与 Microsoft SQL Server 数据库实例结合使用
将 SSL 与 SQL Server 数据库实例结合使用

可使用安全套接字层 (SSL) 对客户端应用程序和运行 Microsoft SQL Server 的 Amazon RDS 数据库实例之间的连接进行加密。对于所有支持的 SQL Server 版本，所有 Amazon 区域提供了 SSL 支持。

在您创建 SQL Server 数据库实例时，Amazon RDS 会为其创建 SSL 证书。SSL 证书会将数据库实例终端节点作为 SSL 证书的公用名 (CN) 包含在内以防止欺诈攻击。

使用 SSL 连接到 SQL Server 数据库实例有两种方法：
+ 强制所有连接使用 SSL — 这种方法对客户端是透明的，客户端不需要为使用 SSL 而执行任何操作。
**注意**  
当您将 `rds.force_ssl` 设置为 `1` 并使用 SSMS 版本 19.3、20.0 和 20.2 时，请检查以下各项：  
在 SSMS 中启用**信任服务器证书**。
将证书导入您的系统。
+ 加密特定连接 — 这种方法在特定客户端计算机上设置 SSL 连接，您必须在客户端上执行加密连接的操作。

有关 SQL Server 的传输层安全性 (TLS) 支持的信息，请参阅 [Microsoft SQL Server 的 TLS 1.2 支持](https://support.microsoft.com/en-ca/help/3135244/tls-1-2-support-for-microsoft-sql-server)。

## 强制与数据库实例的连接使用 SSL
强制使用 SSL

您还可强制与数据库实例的所有连接使用 SSL。如果强制所有连接使用 SSL，则对客户端是透明的，客户端不需要为使用 SSL 而执行任何操作。

如果要强制使用 SSL，请使用 `rds.force_ssl` 参数。默认情况下，`rds.force_ssl` 参数设置为 `0 (off)`。将 `rds.force_ssl` 参数设置为 `1 (on)` 可强制连接使用 SSL。由于 `rds.force_ssl` 参数是静态的，因此，在更改值后，您必须重启数据库实例才能使更改生效。

**强制与数据库实例的所有连接都使用 SSL**

1. 确定附加到数据库实例的参数组：

   1. 登录Amazon Web Services 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

   1. 在 Amazon RDS 控制台的右上角，选择数据库实例的Amazon区域。

   1. 在导航窗格中，选择**数据库**，然后选择数据库实例的名称以显示其详细信息。

   1. 选择 **Configuration** 选项卡。在此部分中查找**参数组**。

1. 如果需要，可创建新的参数组。如果数据库实例使用默认参数组，则必须创建新的参数组。如果数据库实例使用非默认参数组，则可以选择编辑现有参数组或创建新的参数组。如果您编辑现有参数组，则更改将影响使用该参数组的所有数据库实例。

   要创建新的参数组，请按照[在 Amazon RDS 中创建数据库参数组](USER_WorkingWithParamGroups.Creating.md)中的说明执行操作。

1. 编辑新的或现有的参数组以将 `rds.force_ssl` 参数设置为 `true`。要编辑参数组，请按照[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)中的说明执行操作。

1. 如果您创建了一个新的参数组，可修改数据库实例以附加该新参数组。修改数据库实例的 **DB Parameter Group** 设置。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

1. 重启数据库实例。有关更多信息，请参阅“[重启数据库实例](USER_RebootInstance.md)”。

## 加密特定连接
加密特定连接

您可以强制与数据库实例的所有连接使用 SSL，也可以仅加密来自特定客户端计算机的连接。要在特定客户端中使用 SSL，您必须获取客户端计算机的证书、在客户端计算机中导入证书，然后加密来自该客户端计算机的连接。

**注意**  
在 2014 年 8 月 5 日之后创建的所有 SQL Server 实例都在 SSL 证书的公用名 (CN) 字段中使用数据库实例终端节点。在 2014 年 8 月 5 日之前，SSL 证书验证不可用于基于 VPC 的 SQL Server 实例。如果您具有在 2014 年 8 月 5 日之前创建的基于 VPC 的 SQL Server 数据库实例，而且要使用 SSL 证书验证并确保实例终端节点作为该数据库实例 SSL 证书的 CN 包括在内，请重命名该实例。当您重命名数据库实例时，新证书会进行部署，并且实例会重启以启用新证书。

### 获取客户端计算机的证书
获取客户端计算机的证书

要对从客户端计算机到运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密，您需要客户端计算机上的证书。

要获取该证书，请将该证书下载到客户端计算机。有关下载证书的更多信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

下载适当的证书后，使用以下部分中的过程将该证书导入 Microsoft Windows 操作系统。

### 将证书导入客户端计算机
将证书导入客户端计算机

您可以使用以下过程将证书导入客户端计算机上的 Microsoft Windows 操作系统。

**将证书导入 Windows 操作系统：**

1. 在 **Start (开始)** 菜单上的搜索框中，键入 **Run**，然后按 **Enter**。

1. 在 **Open (打开)** 框中，键入 **MMC**，然后选择 **OK (确定)**。

1. 在 MMC 控制台中的 **File** 菜单上，选择 **Add/Remove Snap-in**。

1. 在 **Add or Remove Snap-ins (添加或删除管理单元)** 对话框中，对于 **Available snap-ins (可用管理单元)**，选择 **Certificates**，然后选择 **Add (添加)**。

1. 在 **Certificates snap-in** 对话框中，选择 **Computer account**，然后选择 **Next**。

1. 在 **Select computer** 对话框中，选择 **Finish**。

1. 在 **Add or Remove Snap-ins** 对话框中，选择 **OK**。

1. 在 MMC 控制台中，展开 **Certificates**，打开 **Trusted Root Certification Authorities** 的上下文 (右键单击) 菜单，选择 **All Tasks**，然后选择 **Import**。

1. 在证书导入向导的第一页上，选择 **Next**。

1. 在证书导入向导的第二页上，选择 **Browse**。在浏览窗口中，将文件类型更改为 **All files (\$1.\$1) (所有文件 (\$1.\$1))**，因为 .pem 不是标准证书扩展名。找到您之前下载的 .pem 文件。
**注意**  
从 SQL Server Management Studio（SSMS）等 Windows 客户端进行连接时，我们建议使用 PKCS \$17 (.p7b) 证书格式，而不是 global-bundle.pem 文件。.p7b 格式可确保将完整的证书链 [包括根证书颁发机构和中间证书颁发机构（CA）] 正确导入到 Windows 证书存储中。这样可以防止在启用强制加密时可能发生的连接故障，因为 .pem 导入可能无法正确安装完整的链。

1. 选择 **Open** 以选择证书文件，然后选择 **Next**。

1. 在证书导入向导的第三页上，选择 **Next**。

1. 在证书导入向导的第四页上，选择 **Finish**。这将显示一个指示导入已成功的对话框。

1. 在 MMC 控制台中，展开 **Certificates**，再展开 **Trusted Root Certification Authorities**，然后选择 **Certificates**。找到证书以确认其存在，如此处所示。  
![\[在 MMC 控制台的导航窗格中，从“控制台根节点”、“证书（本地证书）”和“受信任的根证书颁发机构”向下钻取，选择“证书”文件夹。在主页中，选择所需的 CA 证书。\]](http://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/images/rds_sql_ssl_cert.png)

### 对与运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密
对连接进行加密

将证书导入客户端计算机后，您可以对从客户端计算机到运行 Microsoft SQL Server 的 Amazon RDS 数据库实例的连接进行加密。

对于 SQL Server Management Studio，使用以下过程。有关 SQL Server Management Studio 的更多信息，请参阅[使用 SQL Server Management Studio](http://msdn.microsoft.com/en-us/library/ms174173.aspx)。

**对来自 SQL Server Management Studio 的连接进行加密**

1. 启动 SQL Server Management Studio。

1. 为 **Connect to server ** 键入服务器信息、登录用户名和密码。

1. 选择 **Options**。

1. 选择 **Encrypt connection**。

1. 选择 **Connect**。

1. 通过运行以下查询确认连接已加密。验证查询为 `true` 返回 `encrypt_option`。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

对于任何其他 SQL 客户端，请使用以下过程。

**对来自其他 SQL 客户端的连接进行加密**

1. 向连接字符串追加 `encrypt=true`。在 GUI 工具的连接页上，此字符串可能以选项或属性形式提供。
**注意**  
要为使用 JDBC 进行连接的客户端启用 SSL 加密，您可能需要将 Amazon RDS SQL 证书添加到 Java CA 证书 (cacerts) 存储。可通过使用 [keytool](http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html) 实用程序执行该操作。

1. 通过运行以下查询确认连接已加密。验证查询为 `true` 返回 `encrypt_option`。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

# 配置 SQL Server 安全协议和密码


您可以使用数据库参数打开和关闭某些安全协议和密码。您可以配置的安全参数（TLS 版本 1.2 除外）如下表所示。


****  

| 数据库参数 | 允许的值（默认值以粗体显示） | 描述 | 
| --- | --- | --- | 
| rds.tls10 | 默认值，启用，禁用 | TLS 1.0。 | 
| rds.tls11 | 默认值，启用，禁用 | TLS 1.1。 | 
| rds.tls12 | 默认值 | TLS 1.2。您无法修改此值。 | 
| rds.fips | 0, 1 |  将参数设置为 1 时，RDS 会强制使用符合美国联邦信息处理标准 (FIPS) 140-2 标准的模块。 有关详细信息，请参阅 Microsoft 文档中的 [Use SQL Server 2016 in FIPS 140-2-compliant mode](https://docs.microsoft.com/en-us/troubleshoot/sql/security/sql-2016-fips-140-2-compliant-mode)（在 FIPS 140-2 合规模式下使用 SQL Server 2016）。  | 
| rds.rc4 | 默认值，启用，禁用 | RC4 流密码。 | 
| rds.diffie-hellman | 默认值，启用，禁用 | Diffie-Hellman key-exchange 加密。 | 
| rds.diffie-hellman-min-key-bit-length | 默认值，1024，2048，3072，4096 | Diffie-Hellman 密钥的最小位长度。 | 
| rds.curve25519 | 默认值，启用，禁用 | Curve25519 elliptic-curve 加密密码。并非所有引擎版本都支持此参数。 | 
| rds.3des168 | 默认值，启用，禁用 | 具有 168 位密钥长度的三重数据加密标准 (DES) 加密密码。 | 

**注意**  
对于 16.00.4120.1、15.00.4365.2、14.00.3465.1、13.00.6435.1 和 12.00.6449.1 之后的次要引擎版本，数据库参数 `rds.tls10`、`rds.tls11`、`rds.rc4`、`rds.curve25519` 和 `rds.3des168` 的默认设置处于*禁用*状态。否则，默认设置为*启用*。  
对于 16.00.4120.1、15.00.4365.2、14.00.3465.1、13.00.6435.1 和 12.00.6449.1 之后的次要引擎版本，`rds.diffie-hellman-min-key-bit-length` 的默认设置为 3072。否则，默认设置为 2048。

使用以下过程配置安全协议和密码：

1. 创建自定义数据库参数组。

1. 修改参数组中的参数。

1. 将数据库参数组与数据库实例相关联。

有关数据库参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

## 创建安全相关的参数组


为与 SQL Server 版本和数据库实例版本相对应的安全相关参数创建参数组。

### 控制台


以下过程为 SQL Server 标准版 2016 创建一个参数组。

**创建参数组**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择**创建参数组**。

1. 在**创建参数组**窗格中，执行以下操作：

   1. 对于**参数组系列**，选择 **sqlserver-se-13.0**。

   1. 对于**组名称**，输入参数组的标识符，如 **sqlserver-ciphers-se-13**。

   1. 对于**描述**，输入 **Parameter group for security protocols and ciphers**。

1. 选择**创建**。

### CLI


以下过程为 SQL Server 标准版 2016 创建一个参数组。

**创建参数组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Parameter group for security protocols and ciphers"
  ```

  对于 Windows：

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Parameter group for security protocols and ciphers"
  ```

## 修改安全相关参数


修改与 SQL Server 版本和数据库实例版本对应的参数组中的安全相关参数。

### 控制台


以下过程修改您为 SQL Server 标准版 2016 创建的参数组。此示例关闭 TLS 版本 1.0。

**修改参数组**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**参数组**。

1. 选择参数组，例如 **sqlserver-ciphers-se-13**。

1. 在**参数**下，从参数列表中筛选 **rds**。

1. 选择**编辑参数**。

1. 选择 **rds.tls10**。

1. 对于**值**，选择**已禁用**。

1. 选择 **Save changes（保存更改）**。

### CLI


以下过程修改您为 SQL Server 标准版 2016 创建的参数组。此示例关闭 TLS 版本 1.0。

**修改参数组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --parameters "ParameterName='rds.tls10',ParameterValue='disabled',ApplyMethod=pending-reboot"
  ```

  对于 Windows：

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --parameters "ParameterName='rds.tls10',ParameterValue='disabled',ApplyMethod=pending-reboot"
  ```

## 将安全相关参数组与您的数据库实例关联


要将参数组与数据库实例关联，请使用 Amazon Web Services 管理控制台或 Amazon CLI。

### 控制台


您可以将参数组与新的或现有的数据库实例关联：
+ 对于新的数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

### CLI


您可以将参数组与新的或现有的数据库实例关联。

**使用参数组创建数据库实例**
+ 指定在创建参数组时使用的相同数据库引擎类型和主要版本。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --master-user-password secret123 \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --db-parameter-group-name sqlserver-ciphers-se-13
  ```

  对于 Windows：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --master-user-password secret123 ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name sqlserver-ciphers-se-13
  ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

**修改数据库实例并关联参数组**
+ 运行以下命令之一。  
**Example**  

  对于 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --apply-immediately
  ```

  对于 Windows：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --apply-immediately
  ```

# 更新应用程序以使用新的 SSL/TLS 证书连接到 Microsoft SQL Server 数据库实例
更新应用程序以使用新的 SSL/TLS 证书

自 2023 年 1 月 13 日起，Amazon RDS 发布了新的证书颁发机构（CA）证书，以便使用安全套接字层或传输层安全性协议（SSL/TLS）连接到 RDS 数据库实例。接下来，您可以找到有关更新应用程序以使用新证书的信息。

本主题可帮助您确定是否有任何客户端应用程序使用 SSL/TLS 连接到您的数据库实例。如果是这样，您可以进一步检查这些应用程序是否需要证书验证才能连接。

**注意**  
某些应用程序配置为仅在它们可以成功验证服务器上的证书时才连接到 SQL Server 数据库实例。  
对于此类应用程序，您必须更新客户端应用程序信任存储，以包括新的 CA 证书。

更新客户端应用程序信任存储中的 CA 证书后，可以在数据库实例上轮换这些证书。强烈建议在生产环境中实现这些过程之前，先在开发或测试环境中测试它们。

有关证书轮换的更多信息，请参阅[轮换 SSL/TLS 证书](UsingWithRDS.SSL-certificate-rotation.md)。有关下载证书的更多信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。有关对 Microsoft SQL Server 数据库实例使用 SSL/TLS 的信息，请参阅[将 SSL 与 Microsoft SQL Server 数据库实例结合使用](SQLServer.Concepts.General.SSL.Using.md)。

**Topics**
+ [

## 确定是否有任何应用程序使用 SSL 连接到 Microsoft SQL Server 数据库实例
](#ssl-certificate-rotation-sqlserver.determining-server)
+ [

## 确定客户端是否需要证书验证才能连接
](#ssl-certificate-rotation-sqlserver.determining-client)
+ [

## 更新应用程序信任存储
](#ssl-certificate-rotation-sqlserver.updating-trust-store)

## 确定是否有任何应用程序使用 SSL 连接到 Microsoft SQL Server 数据库实例


检查数据库实例配置中 `rds.force_ssl` 参数的值。默认情况下，`rds.force_ssl` 参数设置为 0 (off)。如果 `rds.force_ssl` 参数设置为 1（开），则客户端需要使用 SSL/TLS 进行连接。有关参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

运行以下查询来获取到数据库实例的所有打开的连接的当前加密选项。如果连接已加密，则列 `ENCRYPT_OPTION` 将返回 `TRUE`。

```
select SESSION_ID,
    ENCRYPT_OPTION,
    NET_TRANSPORT,
    AUTH_SCHEME
    from SYS.DM_EXEC_CONNECTIONS
```

此查询仅显示当前连接。它没有显示过去已连接并断开连接的应用程序是否使用了 SSL。

## 确定客户端是否需要证书验证才能连接


您可以检查不同类型的客户端是否需要证书验证才能连接。

**注意**  
如果您使用的连接器不是所列的连接器，请参阅特定连接器的文档以获取有关它如何执行加密连接的信息。有关更多信息，请参阅 Microsoft SQL Server 文档中的 [Microsoft SQL 数据库的连接模块](https://docs.microsoft.com/en-us/sql/connect/sql-connection-libraries?view=sql-server-ver15)。

### SQL Server Management Studio


检查是否对 SQL Server Management Studio 连接进行了加密：

1. 启动 SQL Server Management Studio。

1. 为**连接到服务器**输入服务器信息、登录用户名和密码。

1. 选择 **Options**。

1. 在连接页面中检查是否选择了**加密连接**。

有关 SQL Server Management Studio 的更多信息，请参阅[使用 SQL Server Management Studio](http://msdn.microsoft.com/en-us/library/ms174173.aspx)。

### sqlcmd


以下使用 `sqlcmd` 客户端的示例显示了如何检查脚本的 SQL Server 连接以确定成功的连接是否需要有效证书。有关更多信息，请参阅 Microsoft SQL Server 文档中的[使用 sqlcmd 进行连接](https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-sqlcmd?view=sql-server-ver15)。

当使用 `sqlcmd` 时，如果您使用 `-N` 命令参数对连接进行加密，则 SSL 连接需要对服务器证书进行验证，如以下示例所示。

```
$ sqlcmd -N -S dbinstance.rds.amazon.com -d ExampleDB                     
```

**注意**  
如果 `sqlcmd` 是使用 `-C` 选项调用的，则它将信任服务器证书，即使该证书与客户端信任存储不匹配也是如此。

### ADO.NET


在以下示例中，应用程序使用 SSL 进行连接，并且必须验证服务器证书。

```
using SQLC = Microsoft.Data.SqlClient;
 
...
 
    static public void Main()  
    {  
        using (var connection = new SQLC.SqlConnection(
            "Server=tcp:dbinstance.rds.amazon.com;" +
            "Database=ExampleDB;User ID=LOGIN_NAME;" +
            "Password=YOUR_PASSWORD;" + 
            "Encrypt=True;TrustServerCertificate=False;"
            ))
        {  
            connection.Open();  
            ...
        }
```

### Java


在以下示例中，应用程序使用 SSL 进行连接，并且必须验证服务器证书。

```
String connectionUrl =   
    "jdbc:sqlserver://dbinstance.rds.amazon.com;" +  
    "databaseName=ExampleDB;integratedSecurity=true;" +  
    "encrypt=true;trustServerCertificate=false";
```

要为使用 JDBC 进行连接的客户端启用 SSL 加密，您可能需要将 Amazon RDS 证书添加到 Java CA 证书存储。有关说明，请参阅 Microsoft SQL Server 文档中的[配置客户端加密](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)。您还可以通过将 `trustStore=path-to-certificate-trust-store-file` 附加到连接字符串来直接提供受信任的 CA 证书文件名。

**注意**  
如果在连接字符串中使用 `TrustServerCertificate=true`（或其等效项），则连接过程将跳过信任链验证。在这种情况下，即使无法验证证书，应用程序也会连接。使用 `TrustServerCertificate=false` 执行证书验证，这是最佳实践。

## 更新应用程序信任存储


您可以更新使用 Microsoft SQL Server 的应用程序的信任存储。有关说明，请参阅 [加密特定连接](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Client)。另请参阅 Microsoft SQL Server 文档中的[配置客户端加密](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)。

如果您使用的操作系统不是 Microsoft Windows，请参阅 SSL/TLS 实现的软件分发文档，以获取有关添加新的根 CA 证书的信息。例如，OpenSSL 和 GnuTLS 是常用的选项。使用实现方法将信任添加到 RDS 根 CA 证书。Microsoft 提供了有关在某些系统上配置证书的说明。

有关下载根证书的信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

有关导入证书的示例脚本，请参阅 [将证书导入信任存储的示例脚本](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

**注意**  
更新信任存储时，除了添加新证书外，还可以保留较旧证书。