在處理敏感信息時(shí),數(shù)據(jù)庫(kù)的安全性變得至關(guān)重要。SQL Server提供了多種機(jī)制來(lái)保護(hù)數(shù)據(jù),防止未授權(quán)訪問(wèn)和數(shù)據(jù)泄露。本文將探討SQL Server中的數(shù)據(jù)加密和保護(hù)技術(shù),并提供相應(yīng)的腳本示例。
透明數(shù)據(jù)加密 (TDE)
透明數(shù)據(jù)加密是一種加密數(shù)據(jù)庫(kù)存儲(chǔ)的技術(shù),它用于加密數(shù)據(jù)庫(kù)中的數(shù)據(jù)文件。使用TDE后,即使攻擊者獲得了物理數(shù)據(jù)庫(kù)文件,也無(wú)法讀取數(shù)據(jù),除非他們擁有正確的加密密鑰。
示例腳本:?jiǎn)⒂肨DE
USE master;
GO
-- 創(chuàng)建主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongMasterKeyPassword!23';
-- 創(chuàng)建證書(shū)
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
-- 使用證書(shū)保護(hù)數(shù)據(jù)庫(kù)加密密鑰
USE YourDatabase;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
-- 開(kāi)啟透明數(shù)據(jù)加密
ALTER DATABASE YourDatabase
SET ENCRYPTION ON;
GO
列級(jí)加密
列級(jí)加密允許加密表中特定列的數(shù)據(jù)。這種方式適用于保護(hù)那些包含敏感信息的列,例如信用卡號(hào)碼或社會(huì)保險(xiǎn)號(hào)。
示例腳本:加密列數(shù)據(jù)
USE YourDatabase;
GO
-- 創(chuàng)建列主鍵
CREATE COLUMN MASTER KEY MyColumnMasterKey
WITH
(
KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'CurrentUser/My/UniqueKeyIdentifier'
);
-- 創(chuàng)建列加密密鑰
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
-- 更新表以包含加密數(shù)據(jù)
OPEN SYMMETRIC KEY MySymmetricKey
DECRYPTION BY CERTIFICATE MyServerCert;
UPDATE Employees
SET EncryptedSSN = EncryptByKey(Key_GUID('MySymmetricKey'), SSN);
GO
動(dòng)態(tài)數(shù)據(jù)屏蔽 (DDM)
動(dòng)態(tài)數(shù)據(jù)屏蔽可以限制非特權(quán)用戶(hù)對(duì)敏感數(shù)據(jù)的可見(jiàn)性。屏蔽規(guī)則在查詢(xún)結(jié)果中應(yīng)用,而不是在數(shù)據(jù)庫(kù)存儲(chǔ)中。
示例腳本:設(shè)置動(dòng)態(tài)數(shù)據(jù)屏蔽
USE YourDatabase;
GO
-- 為SSN列添加屏蔽規(guī)則
ALTER TABLE Employees
ALTER COLUMN SSN ADD MASKED WITH (FUNCTION = 'partial(1,"XXX-XX-",4)');
GO
審計(jì)
SQL Server提供了一種強(qiáng)大的審計(jì)功能,可以記錄對(duì)敏感數(shù)據(jù)的訪問(wèn)和更改。
示例腳本:設(shè)置數(shù)據(jù)庫(kù)審計(jì)
USE master;
GO
-- 創(chuàng)建服務(wù)器審計(jì)
CREATE SERVER AUDIT MyServerAudit
TO FILE ( FILEPATH = 'C:\SQLAudits\' )
WITH (ON_FAILURE = CONTINUE);
-- 啟動(dòng)服務(wù)器審計(jì)
ALTER SERVER AUDIT MyServerAudit
WITH (STATE = ON);
USE YourDatabase;
GO
-- 創(chuàng)建數(shù)據(jù)庫(kù)審計(jì)規(guī)范
CREATE DATABASE AUDIT SPECIFICATION MyDatabaseAudit
FOR SERVER AUDIT MyServerAudit
ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::dbo.Employees BY public);
-- 啟動(dòng)數(shù)據(jù)庫(kù)審計(jì)規(guī)范
ALTER DATABASE AUDIT SPECIFICATION MyDatabaseAudit
WITH (STATE = ON);
GO
實(shí)例數(shù)據(jù)表
假設(shè)我們有一個(gè)名為Employees
的數(shù)據(jù)表,它包含員工信息,包括敏感的社會(huì)保險(xiǎn)號(hào)(SSN)。
CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,Name NVARCHAR(50),Position NVARCHAR(50),Department NVARCHAR(50),SSN NVARCHAR(11));
示例腳本:顯示Employees
表的內(nèi)容
安全最佳實(shí)踐
使用TDE保護(hù)整個(gè)數(shù)據(jù)庫(kù):對(duì)于包含敏感數(shù)據(jù)的數(shù)據(jù)庫(kù),啟用TDE以加密存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)。
使用列級(jí)加密保護(hù)特定數(shù)據(jù):對(duì)于特別敏感的數(shù)據(jù)列,使用列級(jí)加密來(lái)提供額外的保護(hù)。
實(shí)施動(dòng)態(tài)數(shù)據(jù)屏蔽保護(hù)非特權(quán)用戶(hù):使用DDM來(lái)限制對(duì)敏感數(shù)據(jù)的訪問(wèn),確保只有授權(quán)用戶(hù)可以查看完整數(shù)據(jù)。
啟用審計(jì)跟蹤對(duì)敏感數(shù)據(jù)的訪問(wèn):配置審計(jì)來(lái)記錄對(duì)敏感數(shù)據(jù)的所有訪問(wèn)和更改,以便進(jìn)行合規(guī)性檢查和安全監(jiān)控。
結(jié)論
通過(guò)適當(dāng)使用TDE、列級(jí)加密、動(dòng)態(tài)數(shù)據(jù)屏蔽和審計(jì)功能,SQL Server管理員可以有效地保護(hù)數(shù)據(jù)庫(kù)中的敏感數(shù)據(jù)。這些技術(shù)的結(jié)合使用可以確保數(shù)據(jù)即使在攻擊者獲得物理訪問(wèn)權(quán)限的情況下也保持安全。以上腳本示例為如何實(shí)施這些技術(shù)提供了指導(dǎo),但在實(shí)際部署時(shí),應(yīng)根據(jù)具體的業(yè)務(wù)需求和安全政策進(jìn)行調(diào)整。
該文章在 2024/2/19 16:21:26 編輯過(guò)