在處理敏感信息時,數據庫的安全性變得至關重要。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;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
-- 開啟透明數據加密
ALTER DATABASE YourDatabase
SET ENCRYPTION ON;
GO
列級加密
列級加密允許加密表中特定列的數據。這種方式適用于保護那些包含敏感信息的列,例如信用卡號碼或社會保險號。
示例腳本:加密列數據
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)
動態數據屏蔽可以限制非特權用戶對敏感數據的可見性。屏蔽規則在查詢結果中應用,而不是在數據庫存儲中。
示例腳本:設置動態數據屏蔽
USE YourDatabase;
GO
-- 為SSN列添加屏蔽規則
ALTER TABLE Employees
ALTER COLUMN SSN ADD MASKED WITH (FUNCTION = 'partial(1,"XXX-XX-",4)');
GO
審計
SQL Server提供了一種強大的審計功能,可以記錄對敏感數據的訪問和更改。
示例腳本:設置數據庫審計
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)。
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 編輯過