CREATE FUNCTION Security.userAccessPredicate(@ValueId int)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT 1 AS accessResult
WHERE @ValueId =
(
SELECT Value
FROM dbo.Values
WHERE UserId = CAST(SESSION_CONTEXT(N'UserId') AS NVARCHAR(50))
) OR NULLIF(CAST(SESSION_CONTEXT(N'UserId') AS nvarchar(50)),'') IS NULL
);
CREATE SECURITY POLICY Security.userSecurityPolicy
ADD FILTER PREDICATE Security.userAccessPredicate(ValueUd) ON dbo.MainTable
比方说MainTable
包含行的milions。是userAccessPredicate
独立计算每行的SELECT Value FROM dbo.Values
?如果是这样,我猜是无效的。如何检查执行表值函数时生成的确切代码? SQL Server Profiler不是因为我使用Azure数据库。
我正在使用SQL Server 2016 Management Studio。
你有联系的物品,有一个链接到另一篇文章谈论的性能:https://blogs.msdn.microsoft.com/sqlsecurity/2015/04/23/row-level-security-性能和 - 共图案/ – Alex