Sql-Server

截斷表需要哪些權限?

  • January 28, 2020

我有一個對數據庫具有以下權限的 SQL 帳戶:

在此處輸入圖像描述

您看到此帳戶所屬的db_executor角色是由以下腳本創建的:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO

當我在桌子上執行 a select, update, insertor時,它工作正常。delete當我嘗試truncate使用桌子時,它給了我這個錯誤資訊:

找不到對象“TableName”,因為它不存在或您沒有權限。

此帳戶缺少什麼權限?

查找此資訊的最佳位置是線上書籍。TRUNCATE TABLE 這裡的文章指出:

所需的最低權限是對 table_name 的 ALTER。TRUNCATE TABLE 權限預設授予表所有者、sysadmin 固定伺服器角色成員以及 db_owner 和 db_ddladmin 固定數據庫角色,並且不可轉讓。但是,您可以將 TRUNCATE TABLE 語句合併到模組(例如儲存過程)中,並使用 EXECUTE AS 子句授予模組適當的權限。

所以 ALTER 是所需的最低權限。您可以作為 DB Owner 獲得它,也可以作為 DB_DDLAdmin 獲得它。或者只是授予更改。

如果您考慮一下 truncate 的作用以及它的工作原理,這是有道理的,這是一個非常“嚴厲”的命令,它會清空數據表并快速執行。

引用自:https://dba.stackexchange.com/questions/52828