1

我有一个安全策略引用的表值函数。我想要ALTER这个功能,但我不能:

消息 3729,级别 16,状态 3,过程 accessPredicate,第 1 行
无法更改“rls.accessPredicate”,因为它被对象“EventSecurityPolicy”引用

嗯,但是 GUI 中的安全策略在哪里?我检查了架构、表和函数。我会假设它会在政策之下

在此处输入图像描述

好吧,我总是可以用 T-SQL 做到这一点

select * 
from sys.security_policies

也许我可以关掉它

Alter security policy rls.EventSecurityPolicy
with (state = OFF);

不,同样的错误:

消息 3729,级别 16,状态 3,过程 accessPredicate,第 1 行
无法更改“rls.accessPredicate”,因为它被对象“EventSecurityPolicy”引用

好的,让我们删除它

delete from sys.objects
where schema_id = schema_id('rls') and object_id='1253579504'

消息 259,级别 16,状态 1,行 2
不允许对系统目录进行临时更新。

您如何克服这种错误:“不允许对系统目录进行临时更新。”?

好的,我将更改程序集..

select * from sys.assemblies

在此处输入图像描述

好吧,我不知道从这里去哪里......

一定有更简单的方法!我只是想改变一个功能!

4

1 回答 1

1

解决方案 -

删除谓词:

ALTER SECURITY POLICY rls.EventSecurityPolicy DROP filter PREDICATE ON 
dbo.Dim_event
ALTER SECURITY POLICY rls.EventSecurityPolicy DROP BLOCK PREDICATE ON 
dbo.Dim_event AFTER UPDATE

然后修改函数:

在此处输入图像描述

于 2017-08-17T11:01:28.117 回答