透明数据加密(TDE)库的备份和还原 |
本文标签:透明数据加密 想到TDE(Transparent Data Encryption) 。 TDE MSDN 说明: “透明数据加密”(TDE) 可对数据和日志文件执行实时 I/O 加密和解密 。这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用 。DEK 是使用存储在服务器的 master 数据库中的证书保护的对称密钥,或者是由 EKM 模块保护的非对称密钥 。TDE 保护“处于休眠状态”的数据,即数据和日志文件 。它提供了遵从许多法律、法规和各个行业建立的准则的能力 。软件开发人员籍此可以使用 AES 和 3DES 加密算法来加密数据,且无需更改现有的应用程序 。 其实吸引我的是“无需更改现有的应用程序”,因为我需要加密的库服务于一个非常稳定的系统,而且这样做所有事情DBA可控 。 TDE加密体系结构: ![]() 测试过程: 复制代码 代码如下: --创建主密钥(Master Key) USE master GO --DROP MASTER KEY CREATE MASTER KEY ENCRYPTION BY PASSWORD=N1qaz@WSX; GO --备份主密钥 BACKUP MASTER KEY TO FILE=NC:\master_key.cer ENCRYPTION BY PASSWORD=N!QAZ2wsx GO --创建基于主密钥的证书 。用于保护数据库加密密钥(Database Encryption Key) --DROP CERTIFICATE SDB_Cert CREATE CERTIFICATE SDB_Cert WITH SUBJECT=NCertificate for SecretDB go --使用私钥加密的方式备份主密钥的证书 BACKUP CERTIFICATE SDB_Cert TO FILE=NC:\SDB_Cert.cer WITH PRIVATE KEY ( FILE =NC:\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,NA),(2,NB),(3,NC); 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=ND:\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=ND:\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=NC:\SDB_Cert.cer WITH PRIVATE KEY ( FILE=NC:\SDB_Cert.pvk, DECRYPTION BY PASSWORD=N!QAZ2wsx ) GO RESTORE DATABASE SecretDB FROM DISK=ND:\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的部署和使用 。 |