首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 安全設計從零開始:威脅建模、最小權限、擁有權鏈、應用程式角色與持續修補

     編輯:關於SqlServer

設計階段即納入安全

安全不是事後加裝的鎖,而是架構決策。從 ER 圖、存取需求文件開始,每個資料表、每個預存程序都要問:誰能讀?誰能改?為什麼?

認證模式抉擇

  • Windows 驗證:整合 AD、Kerberos、密碼原則集中、無密碼傳輸、支援 MFA。預設首選。
  • 混合模式:僅在非網域、跨網域、舊版應用不支援整合驗證時使用。

無論哪種模式,安裝即設定 `sa` 強密碼(甚至 `ALTER LOGIN sa DISABLE`)。

核心安全物件模型

最小權限實踐

  1. 識別敏感資料(薪資、身分證、信用卡、醫療紀錄)。
  2. 識別需存取者(人員、服務帳號、應用程式)。
  3. 建立專用資料庫角色(如 `hr_readonly`、`finance_writer`),授予精確權限。
  4. 將使用者/服務帳號加入對應角色,**嚴禁直接授權給個人**。
  5. 定期審查:`sp_helprolemember`、權限報表。

擁有權鏈:免授權存取的雙面刃

當物件 A(檢視表/預存程序/函數)參考物件 B(資料表),且擁有者相同時,呼叫者僅需 A 的權限,系統略過 B 的權限檢查。

  • 善用: 以檢視表/預存程序封裝敏感資料表,僅授予封裝物件權限,隱藏底層結構與敏感欄位。
  • 風險: 若開發者建立惡意檢視表竊取資料,同擁有者下不被攔截。嚴格管控 DDL 權限,生產庫禁止開發者建立物件。

封裝存取介面

物件說明
登入伺服器層級主體,對應 Windows 帳號或 SQL 登入
使用者資料庫層級主體,對應登入
角色權限集合,伺服器角色 / 資料庫角色 / 應用程式角色
結構描述物件容器,擁有者可控制內部物件權限
權限GRANT / DENY / REVOKE 三態,精確到資料行層級

應用程式角色

無密碼登入,僅在應用程式呼叫 `sp_setapprole` 後啟用,擁有預先定義權限。防止使用者繞過應用程式直接連線資料庫。

EXEC sp_setapprole 'app_role_name', 'strong_password'

持續修補與監控

  • 建立 修補行事曆:月度累積更新、季度 GDR、緊急安全更新 0-day 響應。
  • 啟用 SQL Server Audit / Extended Events 記錄:DDL 變更、失敗登入、權限提升、敏感資料存取。
  • 訂閱 CVE/NVD、Microsoft Security Response Center 通知。

結語

安全設計是權衡:可用性 vs 風險、開發速度 vs 技術債。文件化每個決策理由,定期複盤,才能在演進中守住底線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
介面優點適用場景
檢視表資料行/資料列層級過濾、簡化查詢、支援索引檢視表唯讀報表、敏感欄位遮罩
預存程序參數化防注入、邏輯封裝、交易控制、執行計畫重用寫入操作、複雜業務邏輯
內嵌函數可在查詢中像資料表一樣 JOIN、最佳化器可展開可重用的篩選/轉換邏輯