我需要从update
和限制我的表delete
。
For Update
and Delete
I'm Using an Instead of
trigger,它工作正常。
但是如果我使用TRUNCATE
命令,它会删除我的数据。
我需要限制truncate
或任何其他表修改过程。
任何人都可以提出您的宝贵建议。
要运行TRUNCATE
语句,您需要拥有ALTER
对象的权限;根据文档:TRUNCATE TABLE (Transact-SQL) - Permissions。
如果要阻止用户/角色在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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句