【发布时间】:2017-08-17 10:20:45
【问题描述】:
我有一个被安全策略引用的表值函数。
我想ALTER这个函数,但我不能:
消息 3729,级别 16,状态 3,过程访问谓词,第 1 行
无法更改“rls.accessPredicate”,因为它被对象“EventSecurityPolicy”引用
嗯,但是 GUI 中的安全策略在哪里?我检查了架构、表和函数。我会假设它会在政策之下
好吧,我总是可以用 T-SQL 做到这一点
select *
from sys.security_policies
也许我可以关掉它
Alter security policy rls.EventSecurityPolicy
with (state = OFF);
不一样的错误:
消息 3729,级别 16,状态 3,过程访问谓词,第 1 行
无法更改“rls.accessPredicate”,因为它被对象“EventSecurityPolicy”引用
好的,我们删除它
delete from sys.objects
where schema_id = schema_id('rls') and object_id='1253579504'
消息 259,第 16 级,状态 1,第 2 行
不允许对系统目录进行临时更新。
How do you get past this sort of error: "Ad hoc updates to system catalogs are not allowed."?
好的,我将更改程序集..
select * from sys.assemblies
好吧,我不知道从这里去哪里......
一定有更简单的方法!我只是想改变一个功能!
【问题讨论】:
-
试试这个
ALTER SECURITY POLICY yourpolicy DROP filter/block PREDICATE ON table -
非常感谢...作为注释,我必须包含块谓词的更新后...否则它说谓词不存在。添加为答案,我将标记为正确
-
您可以将其发布为答案,包括您所拥有的、您正在尝试的以及您所做的,它可能会在未来对其他人有所帮助
标签: sql-server user-defined-functions sql-server-2016 security-policy