1

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.

+1

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

Répondre

2

Le meilleur moyen est de regarder un plan d'exécution avec la politique désactivée puis activée. Vous verrez le travail supplémentaire en conséquence. Vous ajoutez une autre table à la requête, ce qui revient à faire une jointure, mais probablement plus efficace.

Pour répondre à votre question, si vous voyez l'ajout d'une boucle imbriquée dans le plan lorsque la politique est, alors oui sa va rangée par rangée Nested Loops

font également la même chose avec DBCC SHOW_STATISTICS pour obtenir un coup d'œil sur les résultats des ressources aussi. Avec des tables plus petites, je n'ai jamais vu de hits de performance visibles, < 100 000 lignes dans une mise en œuvre similaire. J'ai trouvé ce lien utile lorsque je me suis intéressé à cela.

https://www.mssqltips.com/sqlservertip/4005/sql-server-2016-row-level-security-limitations-performance-and-troubleshooting/