SQL Server TRUNCATE TABLE 权限

Eva*_*kas 3 sql-server permissions truncate sql-server-2016

是否可以将 SQL Server 用户配置为无权访问 DDL 语句但有权访问运行TRUNCATE TABLE命令。我知道在幕后它是一个 DDL。

我在搜索引擎上找不到这个。

Sco*_*red 6

您可以使用Jonathan Kehayias 的这项技术来创建允许用户访问TRUNCATE表的存储过程。

正如约翰所说:

“您不能授予 truncate,因为无论出于何种原因,该权限都不存在。您可以做的是使用存储过程并使用 EXECUTE AS OWNER 来绕过它。”

这是上面帖子中的示例代码。

CREATE DATABASE foo
GO

CREATE LOGIN foobar
    WITH password = 'Pa$$w0rd';
GO

USE foo
GO

CREATE user foobar
FROM LOGIN foobar;
GO

CREATE TABLE test (rowid INT identity)
GO

INSERT INTO test DEFAULT
VALUES;
GO

SELECT *
FROM test
GO

CREATE PROCEDURE dbo.truncate_test
    WITH EXECUTE AS OWNER
AS
TRUNCATE TABLE test
GO

GRANT EXECUTE
    ON dbo.truncate_test
    TO foobar
GO

EXECUTE AS LOGIN = 'foobar'

EXECUTE dbo.truncate_test

REVERT
GO

SELECT *
FROM test
GO

USE master
GO

DROP DATABASE foo

DROP LOGIN foobar
Run Code Online (Sandbox Code Playgroud)