SQL Server 行级安全错误消息 33504

问题描述

对于这种情况,如果我们只是遵循 Microsoft 的 example。但是我想更改安全策略以添加一个块谓词:

CREATE Security POLICY [dbo].[SalesFilter]
    ADD FILTER PREDICATE Security.fn_securitypredicate(SalesRep) ON dbo.Sales,ADD BLOCK PREDICATE Security.fn_securitypredicate(SalesRep) ON dbo.Sales AFTER INSERT
WITH (STATE = ON);  

当我发出测试时:

EXECUTE AS USER = 'Sales2';
INSERT INTO Sales VALUES (99,'Sales1','Wiper',2);
REVERT;

我正确地收到了错误消息 33504:

消息 33504,级别 16,状态 1,第 79 行 尝试的操作失败,因为目标对象“.dbo.Sales”具有与此操作冲突的块谓词。如果在视图上执行操作,则块谓词可能会在基础表上强制执行。修改操作以仅针对块谓词允许的行。 声明已终止。

我遇到的问题是错误消息没有提供失败的操作:插入、更新或删除。我什至可以使用“AFTER|BEFORE”部分,但该信息不可用,开箱即用。

如果我有一个更大的流程,可以使用实体框架之类的 ORM 插入、更新和/或删除销售记录来维护订单的销售记录。有没有办法确定尝试了什么操作,但被阻止了?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)