2025-11-05
SQLSERVER
00

目录

透明数据加密 (TDE)
示例脚本:启用TDE
列级加密
示例脚本:加密列数据
动态数据屏蔽 (DDM)
示例脚本:设置动态数据屏蔽
审计
示例脚本:设置数据库审计
实例数据表
示例脚本:显示Employees表的内容
安全最佳实践
结论

在处理敏感信息时,数据库的安全性变得至关重要。SQL Server提供了多种机制来保护数据,防止未授权访问和数据泄露。本文将探讨SQL Server中的数据加密和保护技术,并提供相应的脚本示例。

透明数据加密 (TDE)

透明数据加密是一种加密数据库存储的技术,它用于加密数据库中的数据文件。使用TDE后,即使攻击者获得了物理数据库文件,也无法读取数据,除非他们拥有正确的加密密钥。

image.png

示例脚本:启用TDE

SQL
USE master; GO -- 创建主密钥 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongMasterKeyPassword!23'; -- 创建证书 CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate'; -- 使用证书保护数据库加密密钥 USE YourDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE MyServerCert; -- 开启透明数据加密 ALTER DATABASE YourDatabase SET ENCRYPTION ON; GO

列级加密

列级加密允许加密表中特定列的数据。这种方式适用于保护那些包含敏感信息的列,例如信用卡号码或社会保险号。

示例脚本:加密列数据

SQL
USE YourDatabase; GO -- 创建列主键 CREATE COLUMN MASTER KEY MyColumnMasterKey WITH ( KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE', KEY_PATH = 'CurrentUser/My/UniqueKeyIdentifier' ); -- 创建列加密密钥 CREATE COLUMN ENCRYPTION KEY MyColumnEncryptionKey WITH VALUES ( COLUMN_MASTER_KEY = MyColumnMasterKey, ALGORITHM = 'RSA_OAEP', ENCRYPTED_VALUE = 0x0123456789ABCDEF0123456789ABCDEF ); -- 加密列 ALTER TABLE Employees ADD EncryptedSSN varbinary(256); GO -- 更新表以包含加密数据 OPEN SYMMETRIC KEY MySymmetricKey DECRYPTION BY CERTIFICATE MyServerCert; UPDATE Employees SET EncryptedSSN = EncryptByKey(Key_GUID('MySymmetricKey'), SSN); GO

动态数据屏蔽 (DDM)

动态数据屏蔽可以限制非特权用户对敏感数据的可见性。屏蔽规则在查询结果中应用,而不是在数据库存储中。

示例脚本:设置动态数据屏蔽

SQL
USE YourDatabase; GO -- 为SSN列添加屏蔽规则 ALTER TABLE Employees ALTER COLUMN SSN ADD MASKED WITH (FUNCTION = 'partial(1,"XXX-XX-",4)'); GO

审计

SQL Server提供了一种强大的审计功能,可以记录对敏感数据的访问和更改。

示例脚本:设置数据库审计

SQL
USE master; GO -- 创建服务器审计 CREATE SERVER AUDIT MyServerAudit TO FILE ( FILEPATH = 'C:\SQLAudits\' ) WITH (ON_FAILURE = CONTINUE); -- 启动服务器审计 ALTER SERVER AUDIT MyServerAudit WITH (STATE = ON); USE YourDatabase; GO -- 创建数据库审计规范 CREATE DATABASE AUDIT SPECIFICATION MyDatabaseAudit FOR SERVER AUDIT MyServerAudit ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::dbo.Employees BY public); -- 启动数据库审计规范 ALTER DATABASE AUDIT SPECIFICATION MyDatabaseAudit WITH (STATE = ON); GO

实例数据表

假设我们有一个名为Employees的数据表,它包含员工信息,包括敏感的社会保险号(SSN)。

SQL
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(50), Position NVARCHAR(50), Department NVARCHAR(50), SSN NVARCHAR(11) );

示例脚本:显示Employees表的内容

SQL
SELECT * FROM Employees;

安全最佳实践

  • 使用TDE保护整个数据库:对于包含敏感数据的数据库,启用TDE以加密存储在磁盘上的数据。
  • 使用列级加密保护特定数据:对于特别敏感的数据列,使用列级加密来提供额外的保护。
  • 实施动态数据屏蔽保护非特权用户:使用DDM来限制对敏感数据的访问,确保只有授权用户可以查看完整数据。
  • 启用审计跟踪对敏感数据的访问:配置审计来记录对敏感数据的所有访问和更改,以便进行合规性检查和安全监控。

结论

通过适当使用TDE、列级加密、动态数据屏蔽和审计功能,SQL Server管理员可以有效地保护数据库中的敏感数据。这些技术的结合使用可以确保数据即使在攻击者获得物理访问权限的情况下也保持安全。以上脚本示例为如何实施这些技术提供了指导,但在实际部署时,应根据具体的业务需求和安全政策进行调整。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!