資料庫安全不僅是設定幾個密碼、開啟防火牆,而是一套貫穿「人、流程、技術」的深度防禦體系。本文從 SQL Server 實戰角度,梳理安全模型建立的完整生命週期:帳號治理、權限最小化、稽核追蹤、補丁管理、弱點加固,助您構建經得起實戰檢驗的防線。
| 模式 | 適用場景 | 優勢 | 注意事項 |
| Windows 驗證 | 企業內網、AD 環境 | Kerberos/NTLM 單點登入、密碼策略集中、無密碼傳輸 | 需 SPN 正確註冊支援 Kerberos 委派 |
| 混合模式 | 跨網域、雲端、非 AD 環境 | SQL Login 靈活、支援 contained database user | 必須強制密碼策略、定期輪換、啟用登入稽核 |
建議:能用 Windows 驗證就不用混合模式;必須用 SQL Login 時,採用 Contained Database User 避免孤立用戶問題。
3. 服務帳號最小權限
- SQL Server / Agent / Integration Services 各自使用專屬網域服務帳號(非本地系統、非網路服務)
- 布號僅具備:啟動服務、讀寫資料/記錄/備份目錄、註冊 SPN
- 嚴禁加入 Domain Admins、Local Administrators
二、權限模型:最小權限原則落地
1. 角色設計矩陣
-- 業務應用角色範例
CREATE ROLE app_readonly;
GRANT SELECT ON SCHEMA::dbo TO app_readonly;
GRANT EXECUTE ON SCHEMA::dbo TO app_readonly; -- 僅透過預存程序存取
CREATE ROLE app_readwrite;
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO app_readwrite;
DENY TRUNCATE TABLE ON SCHEMA::dbo TO app_readwrite; -- 防誤刪全表
-- DBA 分級
CREATE ROLE dba_monitor; -- 唯讀監控
GRANT VIEW SERVER STATE TO dba_monitor;
GRANT VIEW ANY DEFINITION TO dba_monitor;
CREATE ROLE dba_maintain; -- 維護非核心
GRANT ALTER ANY DATABASE TO dba_maintain;
GRANT CREATE ANY DATABASE TO dba_maintain;
-- 無 sysadmin,無法 DROP 核心庫、無法變更安全設定
2. 權限審計查詢
-- 找出直接授予的高風險權限
SELECT
p.name AS Principal,
p.type_desc,
perm.permission_name,
perm.state_desc,
OBJECT_NAME(perm.major_id) AS ObjectName
FROM sys.database_permissions perm
JOIN sys.database_principals p ON perm.grantee_principal_id = p.principal_id
WHERE perm.permission_name IN ('CONTROL','ALTER','TAKE OWNERSHIP','VIEW DEFINITION')
AND perm.state_desc = 'GRANT'
AND p.type_desc IN ('SQL_USER','WINDOWS_USER','WINDOWS_GROUP');
3. 動態資料遮罩與行級安全性 (SQL 2016+)
- Dynamic Data Masking:非特權使用者查詢敏感欄位(身分證、信用卡、薪資)自動遮罩,零代碼改動
- Row-Level Security:依使用者身分自動過濾資料列,多租戶/部門隔離的最佳實踐
三、稽核與監控:可見即可控
1. SQL Server Audit 設定
-- 建立伺服器級稽核(寫入檔案,啟用佇列延遲寫入降低效能影響)
CREATE SERVER AUDIT [Audit_Security]
TO FILE (
FILEPATH = 'E:\SQLAudit\',
MAXSIZE = 1 GB,
MAX_FILES = 10,
RESERVE_DISK_SPACE = ON
)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [Audit_Security] WITH (STATE = ON);
-- 稽核規格:登入失敗、權限變更、結構變更
CREATE SERVER AUDIT SPECIFICATION [Spec_Security]
FOR SERVER AUDIT [Audit_Security]
ADD (FAILED_LOGIN_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP)
WITH (STATE = ON);
2. 關鍵事件即時告警
- 登入失敗頻率異常(暴力破解)
- sysadmin 成員變更
- 備份/還原操作
- xp_cmdshell 啟用/使用
四、補丁與弱點管理
1. Slammer 蠕蟲的歷史教訓
2003 年 Slammer 利用 SQL Server 2000 Resolution Service (UDP 1434) 緩衝區溢位,15 秒感染全網。核心教訓:
- 上線前必須打補丁:未修補的 SQL Server 接入網路 = 等待被感染
- 關閉不需要的服務:SQL Server Browser (UDP 1434) 內網不需對外公開
- 防火牆預設拒絕:僅開放 TCP 1433(或自訂連接埠)給應用伺服器 IP 段
2. 現代補丁策略
| 層級 | 頻率 | 驗證方式 |
| Windows OS 更新 | 月度 (Patch Tuesday) | WSUS / Azure Update Management |
| SQL Server CU/GDR | 季度評估、關鍵漏洞 72h 內 | Test 環境回歸 → 預發 → 生產滾動 |
| 驅動程式/韌體 | 半年/廠商建議 | 硬體廠商通知 + 相容性矩陣 |
3. CVE 追蹤來源
- Microsoft Security Response Center (MSRC)
- NVD (National Vulnerability Database)
- SQL Server 版本生命週期表(主流支援 vs 延伸支援)
五、網路與表面積縮減
1. 端點最小化
- TCP/IP:僅綁定業務網卡 IP,停用「全部 IP」
- 連接埠:生產環境修改預設 1433(安全性透過模糊性輔助)
- 停用 Named Pipes、Shared Memory(僅本機管理需求保留 Shared Memory)
- 強制加密連線:`FORCE ENCRYPTION = ON` + 有效憑證
2. 功能表面積
-- 停用高風險功能
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; -- 命令執行
EXEC sp_configure 'Ole Automation Procedures', 0; RECONFIGURE; -- COM 物件
EXEC sp_configure 'Ad Hoc Distributed Queries', 0; RECONFIGURE; -- OPENROWSET
EXEC sp_configure 'CLR Enabled', 0; RECONFIGURE; -- 若不使用 CLR
EXEC sp_configure 'cross db ownership chaining', 0; RECONFIGURE;
EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
六、備份加密與離線保護
- 備份壓縮 + AES 256 加密:`BACKUP DATABASE ... WITH COMPRESSION, ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupCert)`
- 備份檔案異地儲存(不同防火區、雲端冷存儲)
- 定期演練還原(RTO 驗證),檢查加密憑證可用性
七、總結:安全成熟度階梯
| 階段 | 特徵 | 關鍵行動 |
| Level 1: 基線 | SA 強密碼+停用、混合模式最小化、防火牆開放最小埠、打上最新 CU | 安裝清單驗收 |
| Level 2: 最小權限 | 角色化授權、無 sysadmin 應用帳號、服務帳號專屬、稽核開啟 | 權限矩陣文件化、季度審計 |
| Level 3: 深度防禦 | 資料遮罩/RLS、備份加密、TDE 透明加密、Always Encrypted、漏洞掃描納入 CI/CD | 紅藍對抗演練、事件響應 SOP |
| Level 4: 零信任 | 身分為新邊界、Just-In-Time 提權、微隔離、資料分級保護、供應鏈安全 | 持續驗證、自動化修復 |
安全沒有終點,只有持續演進。從今天開始,建立您的 SQL Server 安全基線,並在每次變更中踐行「最小權限、預設拒絕、全程稽核」。
- 上一篇文章: SQL Server 資料與記錄檔案配置核心原則:效能、可用性與容量規劃
- 下一篇文章: SQL Server 與 Oracle 並行控制核心差異:鎖升級、版本存放區與應用對策
Copyright ©
程式碼之家 All Rights Reserved