pik*_*rie 3 sql t-sql sql-server
我正在 SQL Server 2014 中创建行级安全性。
可以在我的表 Client 上删除 FILTER PREDICATE,如下所示:
ALTER SECURITY POLICY rls.tenantAccessPolicy
DROP FILTER PREDICATE ON dbo.Client,
DROP BLOCK PREDICATE ON dbo.Client
GO
Run Code Online (Sandbox Code Playgroud)
但是如果我连续执行这段代码两次,就会出现错误
“安全策略‘rls.tenantAccessPolicy’不包含表‘dbo.Client’上的谓词。”
有没有办法仅在存在时删除它?
我将使用方法IF EXISTS
并检查sys.security_predicates元数据表:
IF EXISTS( SELECT 1
FROM sys.security_predicates sp
WHERE sp.predicate_type = 0 -- filter_predicate
AND OBJECT_ID('rls.tenantAccessPolicy') = sp.object_id
AND sp.target_object_id = OBJECT_ID('dbo.Client'))
BEGIN
ALTER SECURITY POLICY rls.tenantAccessPolicy
DROP FILTER PREDICATE ON dbo.Client;
END;
GO
IF EXISTS( SELECT 1
FROM sys.security_predicates sp
WHERE sp.predicate_type = 1 -- block_predicate
AND OBJECT_ID('rls.tenantAccessPolicy') = sp.object_id
AND sp.target_object_id = OBJECT_ID('dbo.Client'))
BEGIN
ALTER SECURITY POLICY rls.tenantAccessPolicy
DROP BLOCK PREDICATE ON dbo.Client;
END;
GO
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2543 次 |
最近记录: |