安全體系架構
SQL Server 安全採用分層防禦:伺服器層級 → 資料庫層級 → 結構描述/物件層級。核心元素:
- 主體:登入、使用者、角色
- 保護對象:伺服器、資料庫、結構描述、物件
- 權限:GRANT/DENY/REVOKE 授權模型
固定伺服器角色
| 角色 | 核心權限 |
| sysadmin | 完整伺服器控制權(含關閉伺服器) |
| serveradmin | 伺服器設定變更 |
| setupadmin | 連結伺服器、啟動預存程序管理 |
| securityadmin | 登入管理、權限授予 |
| processadmin | 結束處理序 |
| dbcreator | 建立/修改/刪除資料庫 |
| diskadmin | 磁碟檔案管理 |
| bulkadmin | 執行 BULK INSERT |
固定資料庫角色
| 角色 | 核心權限 |
| db_owner | 資料庫完全控制 |
| db_securityadmin | 角色/權限管理 |
| db_accessadmin | 使用者存取管理 |
| db_backupoperator | 備份資料庫 |
| db_ddladmin | DDL 操作 |
| db_datareader | 讀取所有資料表 |
| db_datawriter | 寫入所有資料表 |
| db_denydatareader | 拒絕讀取 |
| db_denydatawriter | 拒絕寫入 |
四大管理面向實作
1. 驗證模式設定
- Windows 驗證:僅允許 Windows 帳戶,最安全
- 混合模式:允許 SQL Server 驗證(sa 帳戶),需強制複雜密碼
2. 登入管理
- 對應 Windows 登入或建立 SQL 登入
- 指定預設資料庫、語言
- 指派伺服器角色(如 sysadmin、dbcreator)
- 啟用「強制密碼原則」「強制密碼到期」
3. 角色管理
T-SQL 建立自訂角色:
CREATE ROLE AppReadOnly;
GRANT SELECT ON SCHEMA::dbo TO AppReadOnly;
EXEC sp_addrolemember 'AppReadOnly', 'AppUser';
4. 權限管理
核心權限指令:
-- 授予物件權限
GRANT SELECT, INSERT, UPDATE ON dbo.Orders TO AppWriter;
-- 拒絕敏感資料存取
DENY SELECT ON dbo.EmployeeSalary TO AppReader;
-- 移除權限
REVOKE INSERT ON dbo.Orders FROM AppWriter;
最佳實務原則
- 最小權限原則:僅授予完成工作所需的最低權限
- 角色基礎授權:透過角色管理權限,避免直接對個別使用者授權
- 定期稽核:檢視
sys.server_principals、sys.database_permissions 確認權限狀態
- 保護 sa:重命名、強制複雜密碼、僅限緊急使用
- 審計追蹤:啟用 SQL Server Audit 記錄關鍵權限變更