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 產生。
將使用者依**業務職責/存取需求**分組,而非依部門。每個應用系統建立獨立群組組合,便於精確授權。
Acct_DataEntry_Operators (資料輸入操作員)Acct_DataEntry_Managers (資料輸入主管)Acct_Report_Writers (報表編寫員)Acct_Accountants (會計師)Acct_Auditors (稽核人員)Acct_Finance_Managers (財務經理)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_securityadminSQL_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 資料庫中的角色成員/權限,**所有新建資料庫自動繼承**。SQL_Server_Security_Ops 加入 db_securityadmin;SQL_Server_Developers 加入 db_owner。EXEC sp_addrolemember 'db_securityadmin', 'DOMAIN\SQL_Server_Security_Ops'; (在 Model 內執行)sp_addrolemember、GRANT/DENY 對網域群組 (SID) 授權,**SQL Server 引擎允許**,僅 EM UI 限制。