2011-01-19 145 views
38

我需要什麼權限才能在MSSQL中授予用戶以便截斷表?截斷表的權限

我想授予最小的一組權限,但我不能使用DELETE,因爲表非常大,而且我希望操作很快。

回答

68

您需要ALTER權限:請參閱權限部分here

請注意,您也可以使用帶有EXECUTE AS的存儲過程,以便運行存儲過程的用戶不需要甚至被授予ALTER權限。

+1

不僅是這個答案是正確的,但沒了「授人以漁」,所指向的文件等等這樣的答案可以通過發現未來的OP。爲什麼downvote? – 2011-01-19 13:36:09

+2

@Ben - 我懷疑是因爲OP發佈這個問題後發佈了這個答案約納秒。我沒有downvote,但常見問題解答允許這樣做。 – 2011-01-19 14:25:15

+0

@Martin - 這不是一個納秒。這是2分鐘 - 這是我花了多長時間才找到答案。 – 2011-01-26 14:26:25

8

所需的最低權限是 對table_name的ALTER。 TRUNCATE TABLE 權限默認爲表 所有者,sysadmin固定 服務器角色的成員,以及db_owner和 db_ddladmin固定數據庫角色和 不可轉讓。但是,您可以使用EXECUTE AS子句在模塊(例如 存儲過程)中包含TRUNCATE TABLE語句 ,並將 授予 對模塊 的適當權限。有關更多 信息,請參閱使用EXECUTE AS至 創建自定義權限集。

Source

1

不允,隱藏...

CREATE TRIGGER TRG_MyTable_Foo 
WITH EXECUTE AS OWNER 
INSTEAD OF DELETE 
AS 
IF CONTEXT_INFO() = 0x9999 
BEGIN 
    TRUNCATE TABLE MyTable 
    SET CONTEXT_INFO 0x00 
END 
GO 

SET CONTEXT_INFO 0x9999 
DELETE MyTable WHERE 1=0 

SET CONTEXT_INFO 可能 毫無疑問是更好分離從TRUNCATE TABLE

正常刪除

我還沒有試過這個...

編輯:更改爲使用SET CONTEXT_INFO。

7

您可以創建一個存儲過程with execute as owner

create procedure dbo.TruncTable 
with execute as owner 
as 
truncate table TheTable 
go 

然後授予執行權限給誰需要截斷該表:

grant execute on TruncTable to TheUser 

現在TheUser可以截斷表所示:

exec dbo.TruncTable 
0

您可以使用exec創建存儲過程UTE的所有者只有一個表或存儲過程的任何表:

CREATE PROCEDURE [dbo].[spTruncate] 
    @nameTable varchar(60) 
    WITH EXECUTE AS OWNER 
    AS 

SET NOCOUNT OFF; 
DECLARE @QUERY NVARCHAR(200); 

SET @QUERY = N'TRUNCATE TABLE ' + @nameTable + ';' 

EXECUTE sp_executesql @QUERY;