在不修改的情况下授予对所有表的截断权限

Grant truncate permissions on all tables with out modify

有没有一种方法可以在不改变 SQL 服务器中的权限的情况下向用户授予截断权限?

所需的最低权限是 table_name 上的 ALTER。 TRUNCATE TABLE 权限默认授予 table 所有者、sysadmin 固定服务器角色成员以及 db_owner 和 db_ddladmin 固定数据库角色,并且不可转让。但是,您可以将 TRUNCATE TABLE 语句合并到模块(例如存储过程)中,并使用 EXECUTE AS 子句向模块授予适当的权限。

CREATE PROCEDURE dbo.usp_Demo  
WITH EXECUTE AS 'CompanyDomain\SqlUser1'  
AS  
SELECT user_name();  

Source

你可以通过这个official documentation

创建一个测试登录名和用户 ID,然后授予它对存储过程 Truncate_Table_Loner 的执行权限。此 ID 将用于执行截断。

-- Grant Execute Permission
-- Setup ID on Database with Connect permission
USE master 
GO
CREATE LOGIN [test_user_id] WITH PASSWORD = 'JustConnect123';
GO
USE TestSQL
GO
CREATE USER [test_user_id] FOR LOGIN [test_user_id];
GO
-- Grant Permission
GRANT EXECUTE ON dbo.Truncate_Table_Loner TO [test_user_id];
GO