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