当前位置: 首页 > news >正文

开启TDE的RDS SQL Server还原到本地环境

问题引入

阿里云RDS SQL Server 2008 R2版本,客户在前端控制台可以自行启用透明数据加密(TDE),来避免客户数据库备份文件被非法盗取而引起拖库风险。最近,客户咨询如何将开启了TDE的数据库还原到本地环境,这篇文章的目的就是为了解决这个问题。

前提条件

请仔细阅读以下限制条件,缺一不可。
 版本限制:仅针对RDS SQL Server 2008 R2版本。
 启用了TDE:客户在前端控制台启用了TDE并且任务已经完成(一旦启用,无法再次关闭TDE)。
 备份文件:下载的备份文件是启用了TDE之后的备份文件。
 证书相关文件:证书文件、证书秘钥文件和证书加密密码,三者缺一不可。请找阿里云索取这三个必要文件。

注意事项

SQL Server TDE技术可以有效防止拖库的安全风险,但是它也是一把双刃剑,在保证安全的同时也要付出一定的成本。在开启TDE之前,请仔细衡量以下注意事项:
 性能下降:开启了TDE的数据库会有一定的性能损失。到底有多大的性能损失,可以参见这篇文章SQL Server Transparent Data Encryption (TDE) Performance Comparison
 TDE功能一旦启用而无法再次关闭,没有后悔药,而由此导致的性能损失由客户自己承担责任。
 目前仅RDS SQL Server 2008 R2提供TDE功能。

RDS上的测试表

为了测试开启了TDE的RDS SQL Server实例如何还原到本地,我们先在RDS上创建测试环境:创建测试表,插入两条数据。

use testtde
GO

create table dbo.testTDE(
id int identity(1,1) not null primary key
,name varchar(10)
);

insert into testTDE
select 'AA' union all select 'BB'
GO

select * from testtde.dbo.testTDE

检查测试环境,截图如下所示:
01.png

还原到本地

还原证书之前

在还原证书之前,即使您拿到了阿里云RDS SQL Server的备份文件,你也无法查看和使用备份文件,因为你没有证书文件相关文件。比如:查看备份文件列表,直接报错:

USE master
GO

RESTORE FILELISTONLY   
   FROM DISK = 'C:\Temp\testtde.bak' ;  

错误信息如下所示:
02.png

由此可见启用了TDE的RDS SQL Server可以非常有效地防止拖库行为。

详细步骤

在证书还原之前,我们是无法使用备份文件的,达到了防止备份文件被偷窥的目的。以下是如何还原到本地环境的详细步骤:创建Master Key;创建证书;还原数据库。

USE master
GO
CREATE MASTER KEY 
ENCRYPTION BY PASSWORD='MyMasterKey'
GO

---这里需要特别强调,证书文件cer_tde.cer、证书秘钥文件cer_tde.pvk和加密密码,请找阿里云索取。
CREATE CERTIFICATE cer_tde
FROM FILE = 'C:\Temp\cer_tde.cer'
WITH PRIVATE KEY (FILE = 'C:\Temp\cer_tde.pvk',
DECRYPTION BY PASSWORD = 'tde_password')
GO

---还原证书后,再次读取备份文件,这里可以成功。参见截图图三
RESTORE FILELISTONLY   
   FROM DISK = 'C:\Temp\testtde.bak' ;  
GO

---还原证书后,成功还原数据库到本地。参见截图图四
RESTORE DATABASE TestTDE   
   FROM DISK = N'C:\Temp\testtde.bak' 
   WITH MOVE 'data1' TO 'C:\Temp\TestTDE.mdf',  
   MOVE 'log' TO 'C:\Temp\TestTDE_log.ldf';  
GO  
---检查测试表数据。参见截图图五
SELECT * FROM TestTDE.dbo.testTDE;

图三:还原证书后,成功读取到备份文件
03.png

图四:还原证书后,成功还原数据库到本地
04.png

图五:测试表数据和原始数据库保持一致
05.png

参考文章

SQLServer · 最佳实践 · 透明数据加密TDE在SQLServer的应用

相关文章:

  • 如何使用thinkphp的model来验证前端表单?
  • 磁盘文件系统2
  • 201521123009 《Java程序设计》第6周学习总结
  • Java深入 - 深入理解Java集合
  • [转] CSSOM视图模式(CSSOM View Module)相关整理
  • 批处理数字前加0
  • MySQL innodb_table_stats表不存在的解决方法
  • 鬼谷子的局 有感
  • bash脚本总结1:[[:not found 错误
  • Maven(一)-- 基础知识
  • Atitit 数据库视图与表的wrap与层级查询规范
  • 【Foreign】咏叹 [模拟退火]
  • css的伪类选择器的使用
  • 待字闺中之快排单向链表;leetcode之Sort List
  • 打造比Dictionary还要快2倍以上的字查找类
  • 【面试系列】之二:关于js原型
  • Android Volley源码解析
  • Git 使用集
  • gitlab-ci配置详解(一)
  • JavaScript服务器推送技术之 WebSocket
  • Js基础知识(一) - 变量
  • mysql 5.6 原生Online DDL解析
  • Otto开发初探——微服务依赖管理新利器
  • VUE es6技巧写法(持续更新中~~~)
  • Vue 重置组件到初始状态
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 高性能JavaScript阅读简记(三)
  • 给第三方使用接口的 URL 签名实现
  • 解析带emoji和链接的聊天系统消息
  • 聊聊sentinel的DegradeSlot
  • 浅谈web中前端模板引擎的使用
  • 强力优化Rancher k8s中国区的使用体验
  • 如何实现 font-size 的响应式
  • 如何优雅地使用 Sublime Text
  • 微信小程序:实现悬浮返回和分享按钮
  • 小程序开发之路(一)
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​linux启动进程的方式
  • #传输# #传输数据判断#
  • #前后端分离# 头条发布系统
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • ( 10 )MySQL中的外键
  • (1)(1.13) SiK无线电高级配置(五)
  • (5)STL算法之复制
  • (6)添加vue-cookie
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (八)Spring源码解析:Spring MVC
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (规划)24届春招和25届暑假实习路线准备规划
  • (转)socket Aio demo
  • . ./ bash dash source 这五种执行shell脚本方式 区别