sqlserver 中使用透明数据加密(Transparent Data Encryption)加密数据库,让你的数据库更加安全

ws_hgo 2011-11-02 03:17:22
先贴BLOG:
sqlserver 中使用透明数据加密(Transparent Data Encryption)加密数据库,让你的数据库更加安全

在现实环境中,我们会遇到数据库备份磁盘丢失或者被盗的情况,此时恶意破坏方只需还原或者附加数据库即可浏览数据。接下来我将介绍透明数据加密(Transparent Data Encryption)的方法来保护你的数据库。如果数据A,使用TDE加密之后,即时恶意破坏方有了备份磁盘,也不能还原或者附加,这是因为数据库使用了被证书保护的加密数据密钥。
1.什么是TDE
透明数据库加密可对数据和日志文件执行实时I/O加密和解密.这种加密使用数据库加密密钥(Data Encrtyption Key),DEK是使用存储在服务器的master数据库中的证书保护的对称密码,或者是由EKM模块保护的非对称密钥.使用(Advanced Encryption Standard)或者3DES(Data Encryption Standard)加密算法来加密数据,并且无需更改现有应用程序.
2.如何使用TDE
1.创建主密钥
2.创建或者获取由该密钥保护的证书
3.创建数据库加密密钥并且由该证书保护该密钥
4.将数据库设置为可加密
下面通实例对TEST DB进行TDE加密
--Create a master key
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '~qaz123[]\';
GO
--Create a certificate
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
GO
--Create a database encryption key and protect it by the certificate
USE TEST
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
--Set the database to use encryption
USE TEST
ALTER DATABASE TEST
SET ENCRYPTION ON;
GO

当你完成上面的操作之后,接下来验证下加密数据的详细信息
SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys


此时你会发现除了TEST DB 外还有tempdb DB,这是因为只有你对任一数据库加密的时候,也会自动的为tempdb 加密
3.查看TDE是否起作用
在另外一台Server上面使用bak文件来还原TEST数据库
RESTORE DATABASE TEST 
FROM DISK = 'E:\数据库\测试数据库\TEST.bak'
WITH MOVE 'TEST' TO 'E:\\数据库\测试数据库\TEST.mdf',
MOVE 'TEST_log' TO 'E:\数据库\测试数据库\TEST.ldf',
NOUNLOAD, REPLACE


执行完上面的代码之后
Message如下
Msg 33111, Level 16, State 3, Line 1
Cannot find server certificate with thumbprint '0x739E848FD2ECB7D945D39B7836BCD65B55D75D43'.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

你使用附加数据库结果也是一样的,怎么解决这个问题了,使用添加同样的证书在这台Server
在添加该证书到这台Server之前,先在以前的Server上面备份证书到文件(其实这个操作我在添加证书的时候已经做啦)
代码如下
--backup certificate nad primary key to file
USE master
GO
BACKUP CERTIFICATE MyServerCert TO FILE = 'D:\Test DB\Test\MyServerCert.cert'
WITH PRIVATE KEY (  
FILE = 'D:\Test DB\Test\MyServerCertPrivate.key',
ENCRYPTION BY PASSWORD = '~qaz123[]\');
GO

备份成功之后,使用备份成功的证书,在目标Server上面创建证书
USE master
GO
CREATE CERTIFICATE MyServerCert
FROM FILE = 'E:\学习\数据库\测试数据库\MyServerCert.cert'
WITH PRIVATE KEY (
FILE = 'E:\学习\数据库\测试数据库\MyServerCertPrivate.key'
, DECRYPTION BY PASSWORD = '~qaz123[]\')
GO


创建成功,查询下证书是否创建成功
SELECT * FROM sys.certificates where name = 'MyServerCert'


再次还原数据库
RESTORE DATABASE TEST 
FROM DISK = 'E:\数据库\测试数据库\TEST.bak'
WITH MOVE 'TEST' TO 'E:\\数据库\测试数据库\TEST.mdf',
MOVE 'TEST_log' TO 'E:\数据库\测试数据库\TEST.ldf',
NOUNLOAD, REPLACE
...全文
450 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQHRSWB 2011-11-10
  • 打赏
  • 举报
回复
真的是高手啊
ws_hgo 2011-11-03
  • 打赏
  • 举报
回复
顺便说下
只要是使用了TDE加密的数据库,在没有安装证书的情况下,通过任何文件(MDF,LDF,bak...)都不是不能还原的
ws_hgo 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ap0405140 的回复:]

感谢分享,

弱弱的问题一下楼主,这个功能跟备份加密是不是同一回事的?
[/Quote]

不是的,TDE主要是通过证书保护加密的数据库密钥
唐诗三百首 2011-11-02
  • 打赏
  • 举报
回复
感谢分享,

弱弱的问题一下楼主,这个功能跟备份加密是不是同一回事的?

红木偶 2011-11-02
  • 打赏
  • 举报
回复
收藏啦,谢楼主分享
快溜 2011-11-02
  • 打赏
  • 举报
回复
顶..
AcHerat 2011-11-02
  • 打赏
  • 举报
回复
尊重原创!
-晴天 2011-11-02
  • 打赏
  • 举报
回复
感谢分享!
--小F-- 2011-11-02
  • 打赏
  • 举报
回复
进来膜拜一下密码达人。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧