在这个时代,敏感的数据都需要加密。但问题不在于是否要加密,而在于采用哪种加密方法。这有几种选择,以下是三种广泛使用的主要数据库加密方法:
- 应用程序接口(API)-应用程序级别
- 插件-数据库级别
- 透明数据加密-磁盘或操作系统级别
越接近应用程序级别,就需要更多的源代码更改。相反,越接近操作系统级别,开发人员需要付出更少的努力。磁盘加密也是最安全的,因为即使黑客访问物理数据库服务器,也无法读取数据。
Microsoft 的透明数据加密(TDE)适用于 SQL Server 2008、Azure SQL Database 和 Azure SQL Data Warehouse 数据文件,在数据写入磁盘时加密数据库。同样,从磁盘读取时,会解密数据。因此,只有在内存时,数据才处于未加密状态。
默认情况下,SQL Server 根本不会加密数据,更不用说加密磁盘了。激活加密需要几个步骤。在今天的文章中,我们将回顾如何在 SQL Server 中打开 TDS。
- 创建主密钥 USE master;
- 创建或获取受主密钥保护的证书 USE master;
- 创建数据库加密密钥并通过证书对其进行保护 USE MyDatabase
- 将数据库设置为使用加密 ALTER DATABASE MyDatabase SET ENCRYPTION ON;
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD='Use a Strong Password For the Database Master Key';
GO
GO
CREATE CERTIFICATE My_TDE_Certificate
WITH SUBJECT='Certificate for TDE';
GO
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate;
GO
备份证书
虽然使用 TDE 加密数据库不需要此步骤,但是如果主数据库损坏,则可以从数据库备份中恢复加密数据,这一点非常重要。如果要将加密数据库移动到另一个服务器,还应备份证书。这是完成备份的代码:
USE master;GO
BACKUP CERTIFICATE TDE_CERT_For_MyData
TO FILE = 'C:\temp\TDE_Cert_For_MyData.cer'
WITH PRIVATE KEY (file='C:\temp\TDE_CertKey.pvk',
ENCRYPTION BY PASSWORD='Use a Strong Password for Backup Here');
请确保将备份密码存储在安全的地方。如果必须重建承载加密数据库的服务器实例或需要将数据库移动到另一个服务器,则需要此密码才能还原证书。
数据库备份
使用 TDE 加密数据库的好处之一是数据库备份也将被加密,从而增强数据安全性。从 SQL Server 2016 开始,你还可以将压缩应用于启用了 TDE 的数据库备份。压缩数据库备份非常重要,因为它可以通过生成比数据库小的备份文件来节省磁盘空间。此外,它还缩短了恢复数据库所需的时间。
以下是如何将压缩应用于启用了 TDE 的数据库备份:
BACKUP DATABASE [MyDatabase]TO DISK = N'E:\backup\MyDatabase_TDE_Compressed.bak'
WITH NOFORMAT, NOINIT, NAME = N'MyDatabase_TDE-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO