为了能够截断表格,我需要在MSSQL中授予用户哪些权限?
我正在尝试授予最小权限集,但我不能使用DELETE,因为表非常大,我希望操作很快。
答案 0 :(得分:70)
您需要ALTER权限:请参阅权限部分here。
请注意,您还可以将存储过程与EXECUTE AS一起使用,这样运行存储过程的用户甚至不需要被授予ALTER权限。
答案 1 :(得分:8)
所需的最低许可是 在table_name上改为ALTER。 TRUNCATE TABLE 权限默认为表 所有者,系统管理员的成员已修复 服务器角色,以及db_owner和 db_ddladmin修复了数据库角色,以及 不可转让。但是,你可以 合并TRUNCATE TABLE 模块中的语句,例如 存储过程和授权 对模块的适当权限 使用EXECUTE AS子句。更多 信息,请参阅使用EXECUTE AS 创建自定义权限集。
答案 2 :(得分:8)
您可以创建存储过程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
答案 3 :(得分: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 可能毫无疑问更好将正常DELETE与TRUNCATE TABLE分开
我没试过这个......
修改:更改为使用SET CONTEXT_INFO。
答案 4 :(得分:-2)
您可以使用execute as owner创建一个存储过程,只对一个表或对任何表的存储过程执行:
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;