【发布时间】:2022-01-13 08:41:45
【问题描述】:
我编写了一个安全策略,其中包含一个谓词过滤器以在 SQL Server 中应用行级安全性。但是,我只想在表存在于数据库中时应用过滤谓词。任何人都可以请我建议吗?以下是安全政策:
IF OBJECT_ID('s.policyName') IS NOT NULL
BEGIN
DROP SECURITY POLICY s.policyName
END
GO
CREATE SECURITY POLICY s.policyName
ADD FILTER PREDICATE s.policyName(ColA) ON TableA
WITH (STATE = ON)
GO
我确实尝试在 Filter 谓词之前和之后添加 if 条件,但它不起作用。非常感谢任何帮助。
【问题讨论】:
-
您需要使用仅在表存在时才执行的动态SQL。否则,当语句被解析并绑定到对象时,会出现错误,因为无法绑定到不存在的对象。
-
您可以使用
If (exists(select object_id from sys.security_policies where name = 'policyName'))按名称检查现有的安全警察。
标签: sql sql-server row-level-security