建立測試帳號 TestUser,僅允許存取 TestLog 資料庫中的 User 資料表,並可精細控制 SELECT/INSERT/UPDATE/DELETE 甚至欄位層級權限。
TestUser,選 SQL Server 驗證,設定密碼TestLogTestLog,架構 保持 dboTestLog → 資料表 → 右鍵 User → 屬性TestUserSELECT、INSERT、UPDATE、DELETESELECTTestUser 登入 SSMSUser 一張表,其他物件不可見| 坑點 | 原因 | 正確做法 |
|---|---|---|
| 步驟 2 未勾選資料庫 | 登入無對應用戶,後續資料庫層級找不到使用者 | 務必在「用戶對應」勾選目標資料庫 |
| 建立登入後直接設「安全性實體」 | 登入尚未認可,資料庫層級用戶不存在 | 先確定建立登入(點確定),再設資料表權限 |
| 刪除登入時資料庫用戶殘留 | SSMS 提示需先刪除資料庫用戶 | 先在各資料庫刪除用戶,再刪除伺服器登入 |
| 授與 CONTROL 權限後欄位限制失效 | CONTROL 包含所有權限,覆蓋 DENY | 勿授 CONTROL,改用精細 GRANT/DENY |
-- 1. 建立登入
CREATE LOGIN TestUser WITH PASSWORD = 'StrongP@ssw0rd', DEFAULT_DATABASE = TestLog;
-- 2. 建立資料庫用戶
USE TestLog;
CREATE USER TestUser FOR LOGIN TestUser;
-- 3. 授與資料表權限
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.User TO TestUser;
-- 4. 拒絕敏感欄位 SELECT
DENY SELECT ON dbo.User (Salary, IDNumber) TO TestUser;
-- 5. 驗證
EXECUTE AS USER = 'TestUser';
SELECT * FROM dbo.User; -- Salary, IDNumber 將不顯示
REVERT;
資料庫 安全性 → 用戶 → TestUser → 屬性 → 安全性實體 → 新增,可對結構描述、組件、非對稱金鑰、對稱金鑰、完整文字類別目錄、訊息類型、遠端服務繫結、路由、搜尋屬性清單、伺服器角色、服務合約、類型等更細緻授權。