Web 應用是資料庫安全最脆弱的攻擊面。本文分析 Web 驗證常見陷阱、IIS 5.0/6.0 四種驗證機制比較、全域群組授權細節與伺服器/資料庫角色對應實作。
-- ASP/ASPX 內嵌連線字串 (極度危險)
conn.Open "Provider=SQLOLEDB; Data Source=DB; User ID=sa; Password=P@ssw0rd;"
sa),無法分辨實際終端使用者。| IIS 驗證方式 | 機制 | 資料庫整合建議 | 安全性 |
|---|---|---|---|
| 匿名存取 (Anonymous) | 預設 IUSR_MACHINE 或自訂網域帳戶 |
為**每個網站/虛擬目錄**建立專用網域帳戶,對應資料庫登入,授與最小權限 | ⭐⭐ (需嚴格帳戶隔離) |
| 基本驗證 | 瀏覽器彈出對話框,明文傳輸 Base64 編碼帳密 | IIS 驗證通過後,**模擬使用者身分** 連線資料庫 (需 Kerberos 委派/约束委派) | ⭐ (明文傳輸,**必須搭配 SSL/TLS**) |
| 整合式 Windows 驗證 (NTLM/Kerberos) | 瀏覽器自動送出登入憑證 (IE/Edge/Chrome 支援) | **最佳選擇**:IIS 模擬使用者身分連線資料庫,支援跨網域信任、雙重躍點 (Kerberos 委派) | ⭐⭐⭐⭐⭐ (企業內網首選) |
| 用戶端憑證對應 | 個人數位憑證映射至網域帳戶 | 憑證取代帳密登入,IIS 映射後同整合驗證流程 | ⭐⭐⭐⭐ (高安全需求、PKI 基礎建設就緒時) |
**結論:Web 環境首選「整合式 Windows 驗證」+ Kerberos 委派**,次選「基本驗證 + SSL」+ 指定網域帳戶。嚴禁在程式碼/設定檔內嵌 sa 或高權限帳密。
-- 允許登入群組 (僅 CONNECT)
EXEC sp_grantlogin 'DOMAIN\SQL_Server_Users';
EXEC sp_defaultdb 'DOMAIN\SQL_Server_Users', 'master';
-- 不加入任何角色,不授與資料庫存取
-- 拒絕登入群組 (Deny 絕對優先)
EXEC sp_grantlogin 'DOMAIN\SQL_Server_Denied_Users';
EXEC sp_denylogin 'DOMAIN\SQL_Server_Denied_Users';
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';
-- 參數 1 必須為完整網域路徑:DOMAIN\GroupName
-- 在 Model 資料庫內執行
EXEC sp_addrolemember 'db_securityadmin', 'DOMAIN\SQL_Server_Security_Ops';
EXEC sp_addrolemember 'db_owner', 'DOMAIN\SQL_Server_Developers';
-- 新資料庫自動擁有此角色成員
Enterprise Manager 僅允許選擇**已建立資料庫使用者**。但 SQL Server 引擎允許直接對 **SID (網域群組/使用者)** 授權:
-- 直接將網域群組加入資料庫角色 (無需先 CREATE USER)
EXEC sp_addrolemember 'db_datareader', 'DOMAIN\Acct_Report_Writers';
EXEC sp_addrolemember 'db_datawriter', 'DOMAIN\Acct_DataEntry_Operators';
-- 此技巧極大簡化管理:AD 群組增減成員即時生效,無需異動資料庫
SQL_ / DB_ 區分伺服器/資料庫層級。Acct_DataEntry_Operators。