如何从 SQL 服务器中的 truncate 保存我的 table

How can I save my table from truncate in SQL Server

我需要限制我的 table 来自 updatedelete

对于 UpdateDelete 我使用的是 Instead of 触发器,它工作正常。

但是如果我使用 TRUNCATE 命令,它会删除我的数据。

我需要限制 truncate 或任何其他 table 修改过程。

谁能给点宝贵的建议。

要运行一个TRUNCATE语句你需要有对象的ALTER权限;根据文档:TRUNCATE TABLE (Transact-SQL) - Permissions.

如果要阻止 user/role 在 table 上使用 TRUNCATE 语句,则需要使用以下内容(替换大括号中的文本 ({})):

USE {YourDatabase}
DENY ALTER ON {YourTable} TO {User/Role};

您可以使用快速测试脚本轻松测试它是否有效:

USE Sandbox;
GO

CREATE TABLE dbo.TestTable (Id int IDENTITY(1,1), String varchar(10));

INSERT INTO dbo.TestTable (String)
VALUES ('asdfhj'),('asdjkas'),('asdjkhsad');
GO

CREATE USER TestUser WITHOUT LOGIN;

ALTER ROLE db_ddladmin ADD MEMBER TestUser;
ALTER ROLE db_datareader ADD MEMBER TestUser;
ALTER ROLE db_datawriter ADD MEMBER TestUser;
GO

EXECUTE AS USER = 'TestUser';
GO
TRUNCATE TABLE dbo.TestTable; --This works
GO
REVERT;
GO

SELECT *
FROM dbo.TestTable;

INSERT INTO dbo.TestTable (String)
VALUES ('asdfhj'),('asdjkas'),('asdjkhsad');

DENY ALTER ON dbo.TestTable TO TestUser;
GO

EXECUTE AS USER = 'TestUser';
GO
TRUNCATE TABLE dbo.TestTable; --This fails
GO
REVERT;
GO

SELECT *
FROM dbo.TestTable;
GO
--Clean up
DROP TABLE dbo.TestTable;
DROP USER TestUser;