SQL Server Truncate Permissions Only
2022-01-15
說明如何使用 SQL Server 授權 Truncate Table 的權限,且同時能保持在最小授權的原則下。本次範例藉由 Stored Procedures 搭配 User without login proxy 的方式完成。
說明
環境物件介紹
- U1
- 使用者 with login, Only Execute permission to dbo.usp_A
- ProxyUser
- 使用者 without login, With Alter permission
- dbo.T1
- Table
- dbo.ups_A
- Stored Procedures 對 dbo.T1 進行 Truncate
Create User
DROP USER IF EXISTS [ProxyUser]
CREATE USER [ProxyUser] WITHOUT LOGIN
GRANT Alter ON dbo.T1 TO ProxyUser
Create Stored Procedures with Execute As Clause
CREATE PROC usp_TruncateTable
WITH EXECUTE AS 'ProxyUser'
AS
TRUNCATE TABLE dbo.T1
GO
注意一定要使用 WITH EXECUTE AS (Execute As With) 的身分 Switch Contetxt 方式,若使用 Execute AS否則執行者會需要 IMPERSONATE 的權限,但若給予 IMERPORNATE 權限又會造成權限過大,無法保持最小權限授權原則。
Grant User Execute Permissions
GRANT EXECUTE ON dbo.usp_TruncateTable TO U1
參考資料
Grant Truncate Table Permissions in SQL Server without ALTER Table