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

SQL Server GRANT 權限授予完整指南:語法、範例與最佳實務

     編輯:關於SqlServer

GRANT 基本語法

GRANT 權限清單 ON 物件 TO 接收者 [WITH GRANT OPTION]
  • 權限清單:SELECT, INSERT, UPDATE, DELETE, EXECUTE, REFERENCES, ALL 等。
  • 物件:資料表、檢視、預存程序、函數、資料庫等。
  • 接收者:資料庫使用者、SQL Server 角色、Windows 使用者/群組。
  • WITH GRANT OPTION:允許受權者再轉授權給他人。

實戰範例

1. 授予資料表 DML 權限

USE pubs;
GRANT INSERT, UPDATE, DELETE ON authors TO Pete WITH GRANT OPTION;

2. 授予 ALL 權限 (含 DDL)

GRANT ALL ON authors TO Pete;  -- 含 CREATE TABLE, BACKUP DATABASE 等,慎用

3. 授予 Windows 群組

GRANT SELECT ON customers TO [DOMAIN\SalesGroup];

4. 授予資料庫角色

GRANT EXECUTE ON usp_GetOrders TO db_datareader;

衝突解決規則

若使用者同時屬於多個角色/群組,權限採 最嚴格原則:
DENY > GRANT (明確拒絕優先) > 隱含拒絕 (無授予即拒絕)。

撤銷與封鎖

  • REVOKE:移除先前授予的 GRANT/DENY,還原為「未授予」狀態。
  • DENY:明確封鎖權限,即使群組有 GRANT 也無法存取。
    範例:DENY SELECT ON salaries TO [DOMAIN\Interns];

完整流程示範

  1. 檢視現有權限:EXEC sp_helprotect authors;
  2. 授予資料庫存取:EXEC sp_grantdbaccess 'Pete';
  3. 授予物件權限:GRANT INSERT, UPDATE, DELETE ON authors TO Pete;
  4. 再次檢視:EXEC sp_helprotect authors; 確認 Pete 新增三筆 GRANT 記錄。

最佳實務建議

  • 遵循 最小權限原則:僅授予業務必要的最小權限集合。
  • 優先使用 資料庫角色 管理權限,避免直接對個別使用者授權。
  • 定期審核 sp_helprotect、sys.database_permissions 移除過期授權。
  • 謹慎使用 WITH GRANT OPTION 與 ALL,防止權限蔓延。
  • 敏感資料表 (薪資、個資) 必須顯式 DENY 非必要角色。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved