Q
截斷表的權限
38
A
回答
68
您需要ALTER權限:請參閱權限部分here。
請注意,您也可以使用帶有EXECUTE AS的存儲過程,以便運行存儲過程的用戶不需要甚至被授予ALTER權限。
8
所需的最低權限是 對table_name的ALTER。 TRUNCATE TABLE 權限默認爲表 所有者,sysadmin固定 服務器角色的成員,以及db_owner和 db_ddladmin固定數據庫角色和 不可轉讓。但是,您可以使用EXECUTE AS子句在模塊(例如 存儲過程)中包含TRUNCATE TABLE語句 ,並將 授予 對模塊 的適當權限。有關更多 信息,請參閱使用EXECUTE AS至 創建自定義權限集。
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;
相關問題
- 1. 截斷表權限
- 2. SSIS中截斷表的最小權限
- 3. gapi.client.drive.permissions.insert返回截斷的權限資源
- 4. 檢查登錄的截斷/更改權限
- 5. 截斷表sqlkorma
- 6. 即使子表爲空也會限制父表的截斷嗎?
- 7. 不能截斷表
- 8. 表截斷與AbcPdf
- 9. 截斷SAS LASR表
- 10. 在C中斷言權限#
- 11. 如何從截斷的表
- 12. 截斷Moodle的用戶表
- 13. MySQL的截斷存檔表
- 14. 當達到表大小限制時,MYSQL是否截斷表?
- 15. PHP文本截斷限制字符
- 16. SQL Server截斷和8192限制
- 17. 限制條目並截斷新條目
- 18. struts2檢查權限攔截器
- 19. PHPUnit Zend_Test_PHPUnit_DatabaseTestCase無法截斷表
- 20. 如何截斷HTML表格
- 21. 使用hibernate/hql截斷表?
- 22. SSIS包執行(截斷表)
- 23. MySql備份和截斷表
- 24. SSIS截斷表錯誤
- 25. 截斷字典列表值
- 26. 用jquery截斷列表
- 27. 截斷表不釋放LCK_M_SCH_S
- 28. Perl DBIx ::類截斷表
- 29. 動態截斷表分區
- 30. mysql截斷表vs刪除
不僅是這個答案是正確的,但沒了「授人以漁」,所指向的文件等等這樣的答案可以通過發現未來的OP。爲什麼downvote? – 2011-01-19 13:36:09
@Ben - 我懷疑是因爲OP發佈這個問題後發佈了這個答案約納秒。我沒有downvote,但常見問題解答允許這樣做。 – 2011-01-19 14:25:15
@Martin - 這不是一個納秒。這是2分鐘 - 這是我花了多長時間才找到答案。 – 2011-01-26 14:26:25