SQL Server Truncate Permissions Only

2022-01-15

說明如何使用 SQL Server 授權 Truncate Table 的權限,且同時能保持在最小授權的原則下。本次範例藉由 Stored Procedures 搭配 User without login proxy 的方式完成。

SQL Server Logo

說明

環境物件介紹

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

相關連結

SQL Server Integrated Service 初探

SQL Server 閃電般快速查詢指南⚡

SQL Server 周邊工具彙整筆記

SQL Server 學習資源筆記