截断表的权限

Sha*_*sek 41 sql-server database-permissions

在MSSQL中,为了能够截断表,我需要什么权限来授予用户权限?

我正在尝试授予最小的权限集,但我不能使用DELETE,因为表非常大,我希望操作很快.

Sha*_*sek 71

您需要ALTER权限:请参阅此处的" 权限"部分.

请注意,您还可以将存储过程与EXECUTE AS一起使用,以便运行存储过程的用户甚至不需要被授予ALTER权限.

  • 不仅这个答案是正确的,而且通过指向文档来“教人钓鱼”是否正确,以便将来OP可以找到这样的答案。为什么要投票? (2认同)
  • @Ben - 我怀疑是因为OP在发布问题后发布了这个答案大约一个纳秒.虽然常见问题解答允许,但我没有进行投票. (2认同)

And*_*mar 9

您可以创建存储过程with execute as owner:

create procedure dbo.TruncTable
with execute as owner
as
truncate table TheTable
go
Run Code Online (Sandbox Code Playgroud)

然后将执行权限授予需要截断该表的任何人:

grant execute on TruncTable to TheUser
Run Code Online (Sandbox Code Playgroud)

现在TheUser可以截断表格,如:

exec dbo.TruncTable
Run Code Online (Sandbox Code Playgroud)


Mar*_*ith 8

所需的最小权限是table_name上的ALTER.TRUNCATE TABLE权限默认授予表所有者,sysadmin固定服务器角色的成员以及db_owner和db_ddladmin固定数据库角色,并且不可转让.但是,您可以将TRUNCATE TABLE语句合并到模块(例如存储过程)中,并使用EXECUTE AS子句向模块授予适当的权限.有关更多信息,请参阅使用EXECUTE AS创建自定义权限集.

资源