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

打造安全穩定 SQL Server 資料庫實戰指南(一):驗證模式選擇與 Windows 驗證最佳實踐

     編輯:關於SqlServer

SQL Server 安全策略的基石在於**驗證**與**授權**的正確配置。本系列第一部分聚焦驗證模式選擇、Windows 整合驗證優勢、全域群組規劃與伺服器角色對應。

核心概念區分

  • 驗證: 確認使用者身分 (你是誰) — 登入時發生。
  • 授權: 允許使用者執行特定動作 (你能做什麼) — 存取資料/執行指令時發生。

第一步:選擇驗證模式

模式機制適用場景優/缺點
Windows 整合驗證網域控制器驗證身分,傳遞 Access Token (含使用者 SID 與群組 SID) 給 SQL Server企業內網、有網域環境、多伺服器管理✅ 單一身分管理、Kerberos/NTLMv2、密碼策略、憑證委派、無密碼儲存風險
❌ 需網域基礎建設
SQL Server 驗證比對 master..sysxlogins 帳號/密碼雜湊舊版應用、無網域、ISP 代管、跨網域不信任環境✅ EM 易設定、獨立於 OS
❌ 單伺服器有效、多伺服器管理惡夢、密碼傳輸/儲存風險、每資料庫重複授權
混合模式以上兩者並存過渡期、特定舊應用相容⚠️ 擁有 SQL 驗證所有缺點,**非必要勿啟用**
**核心原則:只要能連上網域控制器,首選 Windows 整合驗證。** SQL Server 只使用 Access Token 中的 SID,不在乎 Token 由 NT 4.0、Win2K、Win2003 還是 SQL Server 產生。

第二步:建立全域安全性群組 (Domain Global Groups)

將使用者依**業務職責/存取需求**分組,而非依部門。每個應用系統建立獨立群組組合,便於精確授權。

會計系統範例群組

  • Acct_DataEntry_Operators (資料輸入操作員)
  • Acct_DataEntry_Managers (資料輸入主管)
  • Acct_Report_Writers (報表編寫員)
  • Acct_Accountants (會計師)
  • Acct_Auditors (稽核人員)
  • Acct_Finance_Managers (財務經理)

基礎管理群組 (每個 SQL Server 皆建議建立)

  • SQL_Server_Admins → sysadmin 伺服器角色
  • SQL_Server_Users → 僅授與登入權限 (預設資料庫 master),無其他權限
  • SQL_Server_Denied_Users → **拒絕登入** (Deny 優先於 Grant)
  • SQL_Server_DBCreators → dbcreator 角色
  • SQL_Server_Security_Ops → securityadmin 角色
  • SQL_Server_DB_Security_Ops → 資料庫層級 db_securityadmin
  • SQL_Server_Developers → db_owner (開發/測試環境)
  • DB_<DatabaseName>_Users → 個別資料庫存取群組

第三步:授權群組登入與伺服器角色

Enterprise Manager 僅能從現有登入清單選擇,**無法直接選擇網域群組**。必須使用 T-SQL 系統程序:

-- 1. 建立 Windows 群組登入並授與 CONNECT
EXEC sp_grantlogin 'DOMAIN\SQL_Server_Users';
EXEC sp_defaultdb 'DOMAIN\SQL_Server_Users', 'master';
-- 不加入任何伺服器角色,不授與資料庫存取

-- 2. 明確拒絕登入群組
EXEC sp_grantlogin 'DOMAIN\SQL_Server_Denied_Users';
EXEC sp_denylogin 'DOMAIN\SQL_Server_Denied_Users'; -- Deny 最高優先權

-- 3. 將管理群組加入伺服器角色 (需完整網域路徑)
EXEC sp_addsrvrolemember 'DOMAIN\SQL_Server_Admins', 'sysadmin';
EXEC sp_addsrvrolemember 'DOMAIN\SQL_Server_DBCreators', 'dbcreator';
EXEC sp_addsrvrolemember 'DOMAIN\SQL_Server_Security_Ops', 'securityadmin';

第四步:預先配置 Model 資料庫 (新資料庫自動繼承)

  • 修改 Model 資料庫中的角色成員/權限,**所有新建資料庫自動繼承**。
  • 範例:將 SQL_Server_Security_Ops 加入 db_securityadmin;SQL_Server_Developers 加入 db_owner。
  • EXEC sp_addrolemember 'db_securityadmin', 'DOMAIN\SQL_Server_Security_Ops'; (在 Model 內執行)

關鍵提醒

  • Enterprise Manager **無法**直接授權網域群組進入資料庫角色/物件權限 (僅限已建立登入的使用者)。
  • **解法:** 直接在 Query Analyzer 使用 sp_addrolemember、GRANT/DENY 對網域群組 (SID) 授權,**SQL Server 引擎允許**,僅 EM UI 限制。
  • 此技巧讓我們**不需為每個網域群組建立資料庫使用者**即可精確授權。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved