截断表需要哪些权限?

Man*_*eld 18 sql-server permissions truncate sql-server-2012

我有一个对数据库具有以下权限的 SQL 帐户:

在此处输入图片说明

db_executor您看到此帐户所属的角色是由以下脚本创建的:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO
Run Code Online (Sandbox Code Playgroud)

当我运行一个selectupdateinsertdelete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:

找不到对象“TableName”,因为它不存在或您没有权限。

此帐户缺少什么权限?

Mik*_*lsh 31

查找此信息的最佳位置是在线书籍。TRUNCATE TABLE 这里的文章指出:

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

所以 ALTER 是所需的最低权限。您可以将其作为 DB Owner 获得,也可以作为 DB_DDLAdmin 获得。或者只是授予改变。

如果您考虑 truncate 的作用以及它是如何工作的,这是有道理的,这是一个非常“严重”的命令,它会清空数据表并快速完成。


Tho*_*ger 12

根据BOL 中的这个参考

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