问题描述
我说我有
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 关于性能查询,如果您需要应用多个过滤器,则会产生影响。