# 开启透明数据加密功能
透明数据加密（Transparent Data Encryption，简称TDE），通过证书加密数据文件和备份文件，可进行实时的io加密/解密，能有效保护数据库及数据文件的安全。
目前，TDE加密功能仅支持部分RDS for SQL Server版本，详见[表1]。
 表1支持TDE加密功能的RDS for SQL Server版本 
| 实例类型    | 支持TDE加密功能的版本                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|
| 主备实例    | - 2012企业版  - 2014企业版  - 2016企业版  - 2019标准版  - 2022标准版  - 2025标准版                                                                                                                                                                                                                                   |
| 单机实例    | - 2012企业版  - 2014企业版  - 2016企业版  - 2017企业版  - 2019企业版  - 2022企业版  - 2019标准版  - 2022标准版  - 2025标准版   |
| 集群版实例 | - 2017企业版  - 2019企业版  - 2022企业版  - 2025企业版                                                                                                                                                                                                                                                                                                                                                                  |
   
#### 使用限制
- RDS for SQL Server暂不支持已开启TDE加密功能的单机实例转主备。
- RDS for SQL Server暂不提供TDE证书下载。如果需要通过加密的".bak"文件在线下恢复数据，需执行以下操作：
  1. 关闭该数据库的TDE加密功能，请参考[设置数据库级别的TDE加密功能]。
  
  2. 创建该数据库的手动备份。
  
  3. 获取备份文件并通过备份文件恢复数据。
  
  4. 请根据需要开启该数据库的TDE加密功能。
   
- 开启TDE加密功能后，可提高数据安全性，但同时会影响访问加密数据库的读写性能，性能影响在3\~5%之间。请谨慎选择开启TDE加密功能。
- 线下加密的数据库无法直接迁移上云数据库SQL Server实例，需要先关闭线下数据库级别的TDE加密功能，再进行迁移。
- 已开启实例级别TDE加密功能的实例无法使用"恢复到已有实例"功能。
- 在开启实例级别TDE加密功能、执行存储过程rds_tde、开启/关闭数据库级别TDE功能的过程中，建议不要进行以下操作，否则开启数据库级别TDE可能失败：
  - 从数据库中的文件组中删除文件
  
  - 删除数据库
  
  - 使数据库脱机
  
  - 分离数据库
  
  - 将数据库或文件组转换为READ ONLY状态
  
  - 使用ALTER DATABASE命令
  
  - 创建快照
  
  - 启动数据库或数据库文件备份
  
  - 启动数据库或数据库文件还原
   
 
#### 开启实例级别的TDE加密功能
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002572991262.png)，选择区域。
3. 在"实例管理"页面，单击目标实例名称，进入实例的"概览"页面。
4. 单击"TDE状态"后的"开启"。 
   图1开启实例级别的TDE加密功能   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002250115429.png "点击放大")
   
   
5. 在弹出框中，单击"是"，开启TDE加密功能。 
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
   实例级别的TDE加密功能一旦开启，将不允许关闭，请您谨慎操作。
   
   
 
 #### 设置数据库级别的TDE加密功能
![](https://support.huaweicloud.com/usermanual-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
在开启数据库级别的TDE加密功能之前，请确保已成功开启实例级别的TDE加密功能。
1. 连接目标实例。 
   请参考[通过公网连接RDS for SQL Server实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_06.html)、[通过内网连接RDS for SQL Server实例](https://support.huaweicloud.com/qs-rds-mssql/rds_03_0013.html)及[通过DAS连接RDS for SQL Server实例](https://support.huaweicloud.com/qs-rds-mssql/rds_03_0400.html)。
   
   
2. 通过**rds_tde** 存储过程开启、关闭或查询TDE加密功能。
   
   **exec master.dbo.rds_tde** *DatabaseName* ,*TDE_Action*
   - *DatabaseName*：目标数据库名，取值可为null。
   
   - *TDE_Action* ：
     - 取值为"-1"，表示查询目标库加密信息。 如果"*DatabaseName*"取值为null，则返回所有库的加密状态。
       
     
     - 取值为"0"，表示关闭目标库TDE加密功能。
     
     - 取值为"1"，表示开启目标库TDE加密功能。
      
   
   
   1. 开启数据库db1的TDE加密功能： **exec master.dbo.rds_tde db1, 1**
      图2开启数据库TDE加密   
      ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214915734.png) 
   
   2. 关闭数据库db1的TDE加密功能： **exec master.dbo.rds_tde db1, 0**
      图3关闭数据库TDE加密   
      ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214915678.png) 
   
   3. 查询数据库db1的TDE加密状态： **exec master.dbo.rds_tde db1, -1**
      图4开启状态   
      ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214915642.png "点击放大")
      图5关闭状态   
      ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002249955561.png "点击放大") 
   
   4. 查询所有数据库的TDE加密状态： **exec master.dbo.rds_tde null, -1**
      图6查询所有库状态   
      ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002249955469.png "点击放大") 
   
   
   
   
 
