暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server的TDE加密数据库

原创 沙沃兴 2022-12-28
603

  为了帮助包含数据库的安全,可以采取以下预防措施:

  • 设计安全的系统。
  • 对机密资产加密。
  • 在数据库服务器外围构建防火墙。

但是恶意方如果窃取了驱动器或备份磁带等物理介质,就可以还原或附加数据库并浏览其数据。

一种解决方案是加密数据库中的敏感数据,并使用证书保护用于加密数据的密钥。此解决方案可以防止没有密钥的人使用这些数据。但必须提前规划好此类保护。

TDE的主要作用是防止数据库备份或数据库文件被非法获取之后,没有数据加密密码的情况下无法恢复或附加数据库。

USE [master];

GO


1、查看master数据库是否被加密

SELECT name,is_master_key_encrypted_by_server FROM

sys.databases;


2、创建master数据库下的主数据库密钥

USE master

GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'123456';

--drop master key --删除主密钥

OPEN MASTER KEY DECRYPTION BY PASSWORD='123456'


3、查看master数据库下的密钥信息

SELECT * FROM sys.symmetric_keys;


4、创建证书用来保护 数据库加密密钥 (DEK)

CREATE CERTIFICATE MyCertificate WITH SUBJECT = N'ENCRYPTION CERTIFICATE' ,EXPIRY_DATE='2999-12-31'

--DROP CERTIFICATE MyCertificate 删除证书

--SELECT * FROM sys.certificates 查询证书信息


5、创建由MyCertificate保护的DEK 数据库加密密钥 (对称密钥)

USE [要加密的数据库名称]

GO

CREATE DATABASE ENCRYPTION KEY

WITH ALGORITHM = AES_128

ENCRYPTION BY SERVER CERTIFICATE MyCertificate;


6、备份证书和主密钥

USE master;

GO

BACKUP CERTIFICATE MyCertificate TO FILE='d:\MSSQL\MyCertificate'

WITH PRIVATE KEY(FILE ='d:\MSSQL\privatekey.pvk' ,

ENCRYPTION BY PASSWORD='123456'

)


BACKUP MASTER KEY TO FILE = 'd:\MSSQL\master.cer'

ENCRYPTION BY PASSWORD = '123456';

GO


7、对相应的数据库做加密处理

--生产环境下,设置成单用户在运行加密

ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

GO


--备份成功以后,开启TDE 加密

ALTER DATABASE dbname SET ENCRYPTION ON;

GO


--设置多用户访问

ALTER DATABASE dbname SET MULTI_USER WITH ROLLBACK IMMEDIATE;

GO


8、检查数据库是否成功加密.

SELECT DB_NAME(database_id),encryption_state FROM sys.dm_database_encryption_keys;

0 = 不存在数据库加密密钥,未加密

1 = 未加密

2 = 正在进行加密

3 = 已加密

4 = 正在更改密钥

5 = 正在进行解密

6 = 正在进行保护更改(正在更改对数据库加密密钥进行加密的证书或非对称密钥)。


--在其他服务器附加加密后的数据库文件

1、先在他服务器还原了MASTER KEY (将上面在备份拷贝至到其他服务器)

USE master;

RESTORE MASTER KEY

FROM FILE = 'd:\MSSQL\master.cer'

DECRYPTION BY PASSWORD = 'AdM&*2019%$12l5'

ENCRYPTION BY PASSWORD = 'AdM&*2019%$12l5';

GO


2、打开主密钥

USE master

GO

OPEN MASTER KEY DECRYPTION BY PASSWORD=N'AdM&*2019%$12l5';

3、创建证书

USE master

GO

CREATE CERTIFICATE MyCertificate

FROM FILE = 'd:\MSSQL\MyCertificate'

WITH PRIVATE KEY (FILE = 'd:\MSSQL\privatekey.pvk' ,

DECRYPTION BY PASSWORD = 'AdM&*2019%$12l5');

GO

4、将数据库文件拷贝到其他服务器,然后附加数据库。

CREATE DATABASE dbname

ON PRIMARY

(

FILENAME=N'D:\dbname .mdf'

)

LOG ON

(

FILENAME=N'D:\dbname .ldf'

)

FOR ATTACH ;

GO


如果在其他服务器上没有对应的主密钥和证书,进行还原的时候会出现下面的错误:

如果在其他服务器上没有对应的主密钥和证书,进行附加的时候会出现下面的错误:

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论