在处理敏感信息时,数据库的安全性变得至关重要。SQL Server提供了多种机制来保护数据,防止未授权访问和数据泄露。本文将探讨SQL Server中的数据加密和保护技术,并提供相应的脚本示例。
透明数据加密 (TDE)
透明数据加密是一种加密数据库存储的技术,它用于加密数据库中的数据文件。使用TDE后,即使攻击者获得了物理数据库文件,也无法读取数据,除非他们拥有正确的加密密钥。

示例脚本:启用TDE
USE master;GO
-- 创建主密钥CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongMasterKeyPassword!23';
-- 创建证书CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
-- 使用证书保护数据库加密密钥USE YourDatabase;GOCREATE DATABASE ENCRYPTION KEYWITH ALGORITHM = AES_256ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
-- 开启透明数据加密ALTER DATABASE YourDatabaseSET ENCRYPTION ON;GO
列级加密
列级加密允许加密表中特定列的数据。这种方式适用于保护那些包含敏感信息的列,例如信用卡号码或社会保险号。
示例脚本:加密列数据
USE YourDatabase;GO
-- 创建列主键CREATE COLUMN MASTER KEY MyColumnMasterKeyWITH( KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE', KEY_PATH = 'CurrentUser/My/UniqueKeyIdentifier');
-- 创建列加密密钥CREATE COLUMN ENCRYPTION KEY MyColumnEncryptionKeyWITH VALUES( COLUMN_MASTER_KEY = MyColumnMasterKey, ALGORITHM = 'RSA_OAEP', ENCRYPTED_VALUE = 0x0123456789ABCDEF0123456789ABCDEF);
-- 加密列ALTER TABLE EmployeesADD EncryptedSSN varbinary(256);GO
-- 更新表以包含加密数据OPEN SYMMETRIC KEY MySymmetricKeyDECRYPTION BY CERTIFICATE MyServerCert;
UPDATE EmployeesSET EncryptedSSN = EncryptByKey(Key_GUID('MySymmetricKey'), SSN);GO
动态数据屏蔽 (DDM)
动态数据屏蔽可以限制非特权用户对敏感数据的可见性。屏蔽规则在查询结果中应用,而不是在数据库存储中。
示例脚本:设置动态数据屏蔽
USE YourDatabase;GO
-- 为SSN列添加屏蔽规则ALTER TABLE EmployeesALTER COLUMN SSN ADD MASKED WITH (FUNCTION = 'partial(1,"XXX-XX-",4)');GO
审计SQL Server提供了一种强大的审计功能,可以记录对敏感数据的访问和更改。示例脚本:设置数据库审计USE master;GO
-- 创建服务器审计CREATE SERVER AUDIT MyServerAuditTO FILE ( FILEPATH = 'C:\SQLAudits\' )WITH (ON_FAILURE = CONTINUE);
-- 启动服务器审计ALTER SERVER AUDIT MyServerAuditWITH (STATE = ON);
USE YourDatabase;GO
-- 创建数据库审计规范CREATE DATABASE AUDIT SPECIFICATION MyDatabaseAuditFOR SERVER AUDIT MyServerAuditADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::dbo.Employees BY public);
-- 启动数据库审计规范ALTER DATABASE AUDIT SPECIFICATION MyDatabaseAuditWITH (STATE = ON);GO
实例数据表
假设我们有一个名为Employees的数据表,它包含员工信息,包括敏感的社会保险号(SSN)。
CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,Name NVARCHAR(50),Position NVARCHAR(50),Department NVARCHAR(50),SSN NVARCHAR(11));
示例脚本:显示Employees表的内容
安全最佳实践
使用TDE保护整个数据库:对于包含敏感数据的数据库,启用TDE以加密存储在磁盘上的数据。
使用列级加密保护特定数据:对于特别敏感的数据列,使用列级加密来提供额外的保护。
实施动态数据屏蔽保护非特权用户:使用DDM来限制对敏感数据的访问,确保只有授权用户可以查看完整数据。
启用审计跟踪对敏感数据的访问:配置审计来记录对敏感数据的所有访问和更改,以便进行合规性检查和安全监控。
结论
通过适当使用TDE、列级加密、动态数据屏蔽和审计功能,SQL Server管理员可以有效地保护数据库中的敏感数据。这些技术的结合使用可以确保数据即使在攻击者获得物理访问权限的情况下也保持安全。以上脚本示例为如何实施这些技术提供了指导,但在实际部署时,应根据具体的业务需求和安全政策进行调整。
该文章在 2024/2/19 16:21:26 编辑过