sql - SQL Server 行级安全错误消息 33504
问题描述
对于这种情况,如果我们只是按照微软的例子。但是我想更改安全策略以添加一个块谓词:
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 来插入、更新和/或删除销售记录,以维护订单的销售记录。有没有办法确定尝试了哪些操作,但被阻止了?
解决方案
推荐阅读
- tsql - 在计算列中使用 sum 函数
- php - 在选择选项上使用 Ajax 更改颜色行
- python - 在多个条件下为一列中的每一行提取第一个单词
- google-apps-script - 如何使用应用脚本删除特定单元格?
- sql - 使用 SQL Server 或 SSIS 对 API 运行开放查询
- c# - 将参数传递给集合的类型
- symfony - 如何知道最后一个 preremove symfony 监听器
- spring - 无法为 JWT CustomClaimVerifier 抛出自定义异常消息
- node.js - Google Assistant 的履行响应带有转义字符“\”
- google-drive-api - 如何解决“AttributeError:'Resource' 对象没有属性'documents'”错误?