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で発見されましたか?私はスキーマ、テーブル、および関数をチェックしました。私は

select * 
from sys.security_policies 

は、たぶん私はちょうどオフ

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

それを回すことができ

enter image description here

は、[OK]をよく私は、T-SQLでそれを行う常にすることができ、それは政策の下になることを前提としています同じエラーはありません。

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

OK、私はどこへ行く見当がつかない

select * from sys.assemblies 

enter image description here

[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それを削除してみましょうここから....

簡単な方法が必要です。私はちょうど関数を変更したい!

+1

はこの 'ALTERセキュリティポリシーyourpolicy DROPフィルタ/ブロック述語を試しますONテーブル ' – 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