Eva*_*kas 3 sql-server permissions truncate sql-server-2016
是否可以将 SQL Server 用户配置为无权访问 DDL 语句但有权访问运行TRUNCATE TABLE命令。我知道在幕后它是一个 DDL。
我在搜索引擎上找不到这个。
您可以使用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)