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

SQL Server 2005 使用者權限精細控管:僅授予特定資料表 CRUD 與欄位層級存取

     編輯:關於SqlServer

需求情境

建立測試帳號 TestUser,僅允許存取 TestLog 資料庫中的 User 資料表,並可精細控制 SELECT/INSERT/UPDATE/DELETE 甚至欄位層級權限。

圖文操作步驟(SSMS 介面)

1. 建立登入帳號

  • 安全性 → 登入 → 右鍵 新增登入
  • 登入名:TestUser,選 SQL Server 驗證,設定密碼
  • 預設資料庫:選 TestLog

2. 用戶對應

  • 切換 用戶對應 頁籤
  • 勾選 TestLog,架構 保持 dbo
  • 點 確定 完成建立

3. 資料表權限設定

  • 展開 TestLog → 資料表 → 右鍵 User → 屬性
  • 切換 權限 頁籤 → 新增 → 瀏覽 → 選 TestUser
  • 在 明確權限 列表勾選所需權限:SELECT、INSERT、UPDATE、DELETE
  • 欄位層級權限:點右下 欄位權限,針對敏感欄(如薪資、身分證)取消 SELECT

4. 驗證登入

  • 以 TestUser 登入 SSMS
  • 物件總管僅顯示 User 一張表,其他物件不可見
  • 嘗試查詢無權限欄位 → 報錯:「被拒絕 SELECT 權限」

關鍵注意事項(避坑指南)

坑點原因正確做法
步驟 2 未勾選資料庫登入無對應用戶,後續資料庫層級找不到使用者務必在「用戶對應」勾選目標資料庫
建立登入後直接設「安全性實體」登入尚未認可,資料庫層級用戶不存在先確定建立登入(點確定),再設資料表權限
刪除登入時資料庫用戶殘留SSMS 提示需先刪除資料庫用戶先在各資料庫刪除用戶,再刪除伺服器登入
授與 CONTROL 權限後欄位限制失效CONTROL 包含所有權限,覆蓋 DENY勿授 CONTROL,改用精細 GRANT/DENY

T-SQL 腳本化部署(建議生產使用)

-- 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 → 屬性 → 安全性實體 → 新增,可對結構描述、組件、非對稱金鑰、對稱金鑰、完整文字類別目錄、訊息類型、遠端服務繫結、路由、搜尋屬性清單、伺服器角色、服務合約、類型等更細緻授權。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved