Row Level Security technisch inrichten (III)

In eerdere blogs hadden we het over Row Level Security en het toepassen ervan. Maar hoe richt je dit technisch in?

Creëer een RLS schema

Begin met het creëren van een speciaal schema waarin de Row Level Security zaken worden vastgelegd. Statement:

Rls Schema

Creëer een Table Valued Function

Creëer een Table Valued Function (TVF) die als output een tabel geeft met daarin de toegangsrechten. Deze TVF aanmaken met schemabinding. Op deze manier weet je zeker dat de objecten die nodig zijn voor het bepalen van de rechten aanwezig zijn. Dit voorbeeld is zo eenvoudig als mogelijk, maar uiteraard kunnen allerlei andere zaken worden meegenomen in de rechtenbepaling. Denk hierbij bijvoorbeeld aan tijdselementen: hier gaat het alleen om de huidige functie van iemand, maar mogelijk wil je rekening houden met mensen die in een andere tijdsperiode een andere functie hadden. Voorbeeldcode:

Rls Table Valued Function

Maak de security policy

Creëer een security policy. Neem hierin een Filter Predicate op die gebaseerd is op de TVF en waarbij wordt aangegeven op welke tabel(len) de Policy betrekking heeft. Deze opzet maakt het dus mogelijk om de TVF in te zetten voor meerdere tabellen.

Rls Security Policy

Het resultaat van deze policy is dat je op de tabel fact.EndOfContracts 33.697 records aantreft met IsActive = 1, wanneer je deze uitvoert met je eigen user: 

Rls Policy Eigen User

Als je deze query echter uitvoert als SQL-gebruiker HenkDeV, krijg je maar 623 records:

Rls Policy Sql Gebruiker

En voor PeterVO, voor wie nog geen rechten zijn opgenomen in dim.ToegangsRechten, geeft de query 0 records terug:

Rls Policy Gebruiker Zonder Rechten

Dit werkt uiteraard ook voor update-statements, delete-statements en dergelijke (uiteraard afhankelijk van of je deze rechten überhaupt hebt). Als je een update-statement probeert uit te voeren namens de twee eerder gebruikte users zie je verschillen in de output:

Rls Update Statement

De output is dan namelijk:

Rls Output Update Statements

De ingestelde rechten worden ook direct toegepast op andere type statements, zoals een update-statement.

Nuttige opties

Het inzien van actieve policies is relatief simpel. Dit mede doordat enkele goede views door Microsoft zijn toegevoegd. Deze twee queries geven al veel informatie over welke policies en predicates er in de database zijn:

Rls Actieve Policies

Ook is het mogelijk om de policy tijdelijk uit te schakelen, zonder de volledige functie te moeten uitschakelen. Dit maakt het ook mogelijk zaken makkelijk te scripten. De query luidt:

Rls Policy Uitschakelen

Andere toepassingen

Microsoft heeft het zelf niet over security die is gebaseerd op de uitvoerende user, maar spreekt consequent over het kunnen filteren op basis van de execution context. Zonder lang na te denken kan ik inderdaad een aantal interessante mogelijkheden bedenken die op basis van Row Level Security te maken zijn. Als eerste schiet mij te binnen, in een DataWareHouse-context, het alleen weergeven van records waar het IsActive bitje op 1 staat. Hierdoor ontstaan geen vervelende uitkomsten als mensen de veelgemaakte fout maken om dit deel van een WHERE-statement te vergeten. Maar ook in situaties waarin alleen hoeft worden gekeken naar data die betrekking heeft op een afgelopen periode, kan Row Level Security handig zijn. Vaak willen we nog niet direct de data die ouder is dan deze periode uit ons DataWareHouse verwijderen, maar het kan omwille van allerlei omstandigheden (privacy, doelstellingen of andere business rules) wel zo zijn dat deze data in principe niet meer hoeft te worden gepresenteerd. Of in ieder geval niet meer aan bepaalde gebruikers(groepen).

Wensen voor de toekomst

Zijn we tevreden met deze feature en kan er een dikke krul doorheen? Natuurlijk niet! We hebben altijd nog wat te wensen. Zo zou het mooi zijn om onderscheid te kunnen maken tussen de rechten voor SELECT-, INSERT-, UPDATE- en DELETE-statements. Het is namelijk best denkbaar dat iemand alles mag opvragen, maar slechts data moet kunnen toevoegen voor een specifiek deelgebied. Wordt hopelijk vervolgd…

Erwin Slob - data analytics consultant bij Rubicon met jarenlange ervaring in Business Intelligence-oplossingen met behulp van Microsoft-technieken. Specialisaties: informatie-analyse, data modelleren en datavisualisatie.


Terug naar het overzicht

Klantcases

Succesvolle migratie naar Microsoft Business Intelligence

Met de migratie naar Microsoft Business Intelligence beschikt Altrecht over een modern en geavanceerd Business Intelligence- platform.

Lees meer

Dynamics CRM groeit uit tot centrale applicatie voor relatiebeheer en meer!

Behoefte aan één 'full service Microsoft-applicatie-dienstverlener' die in staat is op strategisch niveau mee te denken en gezamenlijk de ICT-visie te realiseren.

Lees meer

Optimalisatie kennismanagement met Microsoft SharePoint

Met SharePoint Server 2010 alle aanwezige kennis gestructureerd en snel en laagdrempelig beschikbaar.

Lees meer

Vragen over dit onderwerp?



Copyright Rubicon   |   All Rights Reserved   |   Disclaimer   |   Leveringsvoorwaarden