Basé sur Row level security J'ai créé une fonction de table d'une valeur:fonction table SQL Server exécuté le code
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
Disons que MainTable
contient des lignes milions. Est-ce que userAccessPredicate
calcule SELECT Value FROM dbo.Values
pour chaque ligne indépendamment? Si c'est le cas, je suppose que c'est inefficace. Comment vérifier ce que le code exact génère lors de l'exécution de la fonction table? SQL Server Profiler n'est pas moyen car j'utilise Azure DB. J'utilise SQL Server 2016 Management Studio.
L'article que vous avez lié, a un lien vers un autre article parlant de la performance: https://blogs.msdn.microsoft.com/sqlsecurity/2015/04/23/row-level-security- performance-and-common-patterns / – Alex