是按行还是按选择执行SQL Server安全策略

问题描述

我说我有

CREATE  FUNCTION [sec].[PartyGroupAccesspredicate](@PartyGroupId uniqueidentifier)
    RETURNS TABLE     
    WITH SCHEMABINDING
AS
    RETURN SELECT 1 AS accessResult
        FROM [sec].[PartyGroupPartyLink] partyGroupLink
        WHERE
        (
            partyGroupLink.PartyGroupId = @PartyGroupId AND partyGroupLink.PartyId = CAST(SESSION_CONTEXT(N'PartyId') AS VARCHAR(50))
            AND @PartyGroupId IS NOT NULL
        )
        
GO



CREATE Security POLICY [sec].[PartyGroupAccesspolicy] 
ADD FILTER PREDICATE [sec].[PartyGroupAccesspredicate]([PartyGroupId]) ON [int].[Program]

...安全策略是针对每一行执行还是sql进行一些仅执行一次的优化?

是否有更好的方法可以提高性能

解决方法

安全策略应用于行级别。这就是在SQL Server中实现行级安全性的方式。 参考:Row level security 关于性能查询,如果您需要应用多个过滤器,则会产生影响。