【发布时间】:2018-01-01 15:15:45
【问题描述】:
基于Row level security我创建了一个表值函数:
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 包含数百万行。 userAccessPredicate 是否为每一行独立计算 SELECT Value FROM dbo.Values?如果是这样,我想它是无效的。如何检查执行表值函数时生成的确切代码? SQL Server Profiler 不行,因为我使用的是 Azure DB。
我正在使用 SQL Server 2016 Management Studio。
【问题讨论】:
-
你链接的文章,有一个链接到另一篇谈论性能的文章:blogs.msdn.microsoft.com/sqlsecurity/2015/04/23/…
标签: sql sql-server tsql user-defined-functions row-level-security