透明数据加密(TDE)库的备份和还原

 更新时间:2012年07月17日 22:08:31   作者:  
对于包含敏感数据的库,要实现备份加密。即备份文件别人拿到也不能还原和查看其中的数据
想到TDE(Transparent Data Encryption)。

TDE MSDN 说明:

“透明数据加密”(TDE) 可对数据和日志文件执行实时 I/O 加密和解密。这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用。DEK 是使用存储在服务器的 master 数据库中的证书保护的对称密钥,或者是由 EKM 模块保护的非对称密钥。TDE 保护“处于休眠状态”的数据,即数据和日志文件。它提供了遵从许多法律、法规和各个行业建立的准则的能力。软件开发人员籍此可以使用 AES 和 3DES 加密算法来加密数据,且无需更改现有的应用程序。
其实吸引我的是“无需更改现有的应用程序”,因为我需要加密的库服务于一个非常稳定的系统,而且这样做所有事情DBA可控。

TDE加密体系结构:

untitled
测试过程:
复制代码 代码如下:

--创建主密钥(Master Key)
USE master
GO
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD=N'1qaz@WSX';
GO
--备份主密钥
BACKUP MASTER KEY TO FILE=N'C:\master_key.cer'
ENCRYPTION BY PASSWORD=N'!QAZ2wsx'
GO
--创建基于主密钥的证书。用于保护数据库加密密钥(Database Encryption Key)
--DROP CERTIFICATE SDB_Cert
CREATE CERTIFICATE SDB_Cert
WITH SUBJECT=N'Certificate for SecretDB'
go
--使用私钥加密的方式备份主密钥的证书
BACKUP CERTIFICATE SDB_Cert
TO FILE=N'C:\SDB_Cert.cer'
WITH PRIVATE KEY
(
FILE =N'C:\SDB_Cert.pvk',
ENCRYPTION BY PASSWORD='!QAZ2wsx'
)
GO
--创建测试库SecretDB
USE master
GO
CREATE DATABASE SecretDB
GO
USE SecretDB
GO
CREATE TABLE SDB_TB
(ID INT,VAL NVARCHAR(20));
INSERT INTO SDB_TB
VALUES (1,N'A'),(2,N'B'),(3,N'C');
GO
USE SecretDB
go
--创建数据库加密密钥
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM=AES_128
ENCRYPTION BY SERVER CERTIFICATE SDB_Cert;
GO
--启用数据库加密
USE SecretDB
go
ALTER DATABASE SecretDB SET ENCRYPTION ON
go
--备份SecretDB,用于后续的异机还原测试
USE master
go
BACKUP DATABASE SecretDB TO DISK=N'D:\SecretDB.bak'
go
在完成这些后,SecretDB库已经加密,并且得到其加密后的备份文件,接下来需要在另台还原这个备份。
我把SecretDB.bak,SDB_Cert.cer,SDB_Cert.pvk拷到别一台机。直接还原的话,会报错。需要创建原来用于加密的证书来还原数据库备份。我的目的达到了!
--在异机上恢复SecretDB的备份
USE master
GO
CREATE DATABASE SecretDB
GO
RESTORE DATABASE SecretDB
FROM DISK=N'D:\SecretDB.bak'
WITH REPLACE
GO
--消息 33111,级别 16,状态 3,第 1 行
--找不到指纹为 '0x0106000000000009010000009C529FFD5C7FD72FD0AAE9EDF46C5F69946FFED0' 的服务器 证书。
--消息 3013,级别 16,状态 1,第 1 行
--RESTORE DATABASE 正在异常终止。
创建证书并还原。
USE master
GO
CREATE CERTIFICATE SDB_Cert
FROM FILE=N'C:\SDB_Cert.cer'
WITH PRIVATE KEY
(
FILE=N'C:\SDB_Cert.pvk',
DECRYPTION BY PASSWORD=N'!QAZ2wsx'
)
GO
RESTORE DATABASE SecretDB
FROM DISK=N'D:\SecretDB.bak'
WITH REPLACE
GO

总结:
其实在做TDE前应该仔细阅读BOL的说明:ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_4deptrbl/html/c75d0d4b-4008-4e71-9a9d-cee2a566bd3b.htm
其中说到:
如果使用 TDE 对数据库进行加密,备份压缩将无法显著压缩备份存储。
复制不会以加密形式从启用了 TDE 的数据库中自动复制数据。如果您想保护分发和订阅服务器数据库,则必须单独启用 TDE。
某些限制和注意事项,会影响TDE的部署和使用。

相关文章

  • SQL Server 2008图文安装教程

    SQL Server 2008图文安装教程

    从安装程序看,感觉SQL Server 2008的设计更灵活、更精确,安装速度在我的笔记本上装的虚拟机(分配了768M内存)中比较流畅,感觉比2005要好。
    2009-02-02
  • SQL中 decode()函数简介

    SQL中 decode()函数简介

    DECODE函数,是ORACLE公司的SQL软件ORACLE PL/SQL所提供的特有函数计算方式,以其简洁的运算方式,可控的数据模型和灵活的格式转换而闻名
    2016-03-03
  • 通过navicat连接SQL Server数据库的详细步骤

    通过navicat连接SQL Server数据库的详细步骤

    本文介绍如何通过navicat连接SQL Server数据库,以往总是使SQL Server客户端来连接SQL Server数据库,但是SQL Server客户端一般有几百M的大小,而且安装繁琐配置麻烦,如果可以通过Navicat直接连接SQL Server则会非常轻松方便,需要的朋友可以参考下
    2023-12-12
  • 解决Navicat连接本地sqlserver数据库成功后没有库表数据的问题

    解决Navicat连接本地sqlserver数据库成功后没有库表数据的问题

    本文主要给大家介绍了如何解决Navicat连接本地sqlserver数据库成功后没有库表数据的问题,文中有详细的原因分析和解决方法,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • SQL Server多表查询优化方案集锦

    SQL Server多表查询优化方案集锦

    本文我们主要对SQL Server多表查询的优化方案进行了总结,并给出了实际的例子进行性能与效率的对比,需要的朋友可以参考下
    2015-08-08
  • SQL学习笔记五去重,给新加字段赋值的方法

    SQL学习笔记五去重,给新加字段赋值的方法

    SQL学习笔记五去重,给新加字段赋值的方法,需要的朋友可以参考下。
    2011-08-08
  • 如何恢复SQL Server 2000损坏的数据库文件

    如何恢复SQL Server 2000损坏的数据库文件

    在现实情况中由于硬件和软件的原因可能导致数据库文件损坏,那么损坏的数据库文件有没有办法修复呢?下面讲讲如何恢复SQL Server 2000损坏的数据库文件
    2014-01-01
  • SQL Server主键与外键设置以及相关理解

    SQL Server主键与外键设置以及相关理解

    在数据库的学习中对于一个表的主键和外键的认识是非常重要的,下面这篇文章主要给大家介绍了关于SQL Server主键与外键设置以及相关理解的相关资料,需要的朋友可以参考下
    2022-10-10
  • SQL窗口函数之排名窗口函数的使用

    SQL窗口函数之排名窗口函数的使用

    取值窗口函数可以用于返回窗口内指定位置的数据行。本文主要介绍了SQL窗口函数之排名窗口函数的使用,具有一定的参考价值,感兴趣的可以了解一下
    2022-04-04
  • 数据库SQL中having和where的用法区别

    数据库SQL中having和where的用法区别

    这篇文章主要介绍了数据库SQL中having和where的用法区别的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11

最新评论