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

打造安全穩定 SQL Server 資料庫實戰指南(三):資料庫存取授權、權限分配與安全管理簡化原則

     編輯:關於SqlServer

系列最終篇:聚焦資料庫層級授權模型——**使用者自訂角色**取代內建角色、權限分配鐵律 (GRANT/REVOKE/DENY 優先序)、SQL/Windows 登入統一容器化管理、安全策略簡化十大經驗法則。

一、資料庫存取授權:群組優先、拒絕策略

  • sp_grantdbaccess 授權群組存取資料庫 (建立資料庫使用者對應 SID)。
  • **無 sp_denydbaccess** (無法像伺服器層級 sp_denylogin 直接拒絕)。
  • **替代拒絕方案:** 建立 DB_Name_Denied_Users 群組 → 授權存取 → 加入 db_denydatareader + db_denydatawriter 角色 (僅封鎖 DML,不封鎖 DDL)。
  • **簡化原則:** 僅建立 DB_Name_Users 群組授權存取,其他群組不授權。**透過 AD 群組增減成員即時控管存取權**。

二、權限分配:自訂角色取代內建角色

為何不用內建角色 (db_datareader 等)?

  • 範圍過廣:db_datareader = 所有資料表/檢視表 SELECT,難以精細排除敏感表。
  • 維護陷阱:授予廣泛權限再逐一 DENY 易遺漏新物件/新成員。

最佳實踐:建立對應群組的自訂角色


-- 會計系統範例
EXEC sp_addrole 'Acct_DataEntry_Operators_Role';
EXEC sp_addrole 'Acct_DataEntry_Managers_Role';
EXEC sp_addrole 'Acct_Report_Writers_Role';
-- 命名對應群組:_Role 後綴,便於對應

精確授權範例


-- 僅授予必要物件權限
GRANT SELECT ON dbo.Vouchers TO Acct_Report_Writers_Role;
GRANT INSERT, UPDATE ON dbo.Vouchers TO Acct_DataEntry_Operators_Role;
GRANT EXECUTE ON usp_PostVoucher TO Acct_DataEntry_Managers_Role;
DENY SELECT ON dbo.Salary_Details TO Acct_Report_Writers_Role; -- 敏感表明確拒絕

保留的兩個內建角色

  • db_securityadmin:授權安全性管理員管理角色/權限。
  • db_owner:授權開發/建構人員建立結構 (僅限開發/測試環境)。

三、統一容器:自訂角色整合 SQL 與 Windows 登入

**自訂資料庫角色可同時包含:SQL Server 登入、Windows 全域群組、本地群組、個別網域帳戶。**


-- 同一角色容納異質主體
EXEC sp_addrolemember 'Acct_Report_Writers_Role', 'DOMAIN\Acct_Report_Writers';      -- Windows 群組
EXEC sp_addrolemember 'Acct_Report_Writers_Role', 'SQL_Report_Service_Account';       -- SQL 登入
EXEC sp_addrolemember 'Acct_Report_Writers_Role', 'DOMAIN\jdoe';                        -- 個別帳戶
這是使用自訂角色而非直接授權群組的**核心原因**:單一授權容器整合所有身分類型,應用程式可混合使用 SQL/Windows 驗證無縫切換。

四、安全管理簡化十大經驗法則

  1. 分層授權: 伺服器存取 ← SQL_Server_Users 群組;資料庫存取 ← DB_Name_Users 群組。
  2. 權限流向: 使用者 → 加入全域群組 → 群組加入資料庫角色 → 角色擁有物件權限。
  3. 多重權限累加: 需跨職能權限的使用者,**加入多個全域群組** (AD 支援多群組成員)。
  4. 集中管理: 所有存取/權限變更在**網域控制器 (AD)** 完成 (群組成員增減),資料庫層面**零修改**自動生效。
  5. 命名規範: 群組 SQL_/DB_ 前綴、角色 _Role 後綴、對應清晰。
  6. 最小權限原則: 預設無權限,按需 GRANT;敏感物件主動 DENY。
  7. 拒絕優先: DENY 絕對覆蓋 GRANT,謹慎使用避免誤傷。
  8. 稽核追蹤: 啟用失敗登入稽核,定期審閱 sysadmin 成員、敏感物件權限變更。
  9. 文件化: 維護「群組-角色-權限」對應矩陣表,變更留痕。
  10. 定期複核: 每季審視 sysadmin、db_owner 成員名單,移除離職/調動人員。

總結:成熟安全策略架構圖


[Active Directory]
   │
   ├─ Global Groups (業務/管理) ──→ [SQL Server 登入映射]
   │                                    │
   │                                    ▼
   │                              [伺服器角色: sysadmin, securityadmin...]
   │                                    │
   ▼                                    ▼
[資料庫]                            [Model 資料庫預配置角色]
   │                                    │
   ├─ sp_grantdbaccess (DB_Users 群組) │
   │                                    │
   ▼                                    ▼
[自訂資料庫角色] ←────────────────── (新資料庫自動繼承)
   │  (對應群組命名, 精確 GRANT/DENY)
   ▼
[物件權限: SELECT/INSERT/UPDATE/EXECUTE...]
規劃得當,你能在網域控制器完成所有存取權限維護,伺服器自動反映 AD 設定調整。基本措施雖簡單,卻能構建極易管理、經得起考驗的安全策略。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved