1

我有一个表值函数正在被安全策略引用。 我想ALTER的功能,但我不能:SQL Sever 2016更改表值函数 - 更改安全策略

Msg 3729, Level 16, State 3, Procedure accessPredicate, Line 1
Cannot ALTER 'rls.accessPredicate' because it is being referenced by object 'EventSecurityPolicy'

嗯,但其中的安全策略GUI中发现了什么?我检查了模式,表格和函数。我会认为,这将是在政策

enter image description here

玉以及我总是可以用T-SQL做

select * 
from sys.security_policies 

也许我就可以把它关掉

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

没有同样的错误:

Msg 3729, Level 16, State 3, Procedure accessPredicate, Line 1
Cannot ALTER 'rls.accessPredicate' because it is being referenced by object 'EventSecurityPolicy'

OK,让我们删除

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

Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.

How do you get past this sort of error: "Ad hoc updates to system catalogs are not allowed."?

OK,我会改变装配..

select * from sys.assemblies 

enter image description here

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

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

+1

试试这个'ALTER安全政策yourpolicy DROP过滤器/块谓词在桌子上# – TheGameiswar

+0

完美的谢谢你......作为笔记我哈d包含块谓词的AFTER UPDATE ...否则它说谓词不存在。 添加为答案&我将标记为正确 –

+0

您可以将该答案作为答案发布,包含您的所作所为,以及您正在尝试做什么和做了什么,它可能会在未来帮助其他人 – TheGameiswar

回答

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 

然后修改功能:

enter image description here