MG Software.
HomeOver onsDienstenPortfolioBlogCalculator
Contact
MG Software
MG Software
MG Software.

MG Software ontwikkelt op maat gemaakte software, websites en AI-oplossingen die bedrijven helpen groeien.

© 2026 MG Software B.V. Alle rechten voorbehouden.

NavigatieDienstenPortfolioOver OnsContactBlogCalculator
DienstenOntwikkeling op maatSoftware koppelingenSoftware herontwikkelingApp laten ontwikkelenSEO & vindbaarheid
KennisbankKennisbankVergelijkingenVoorbeeldenAlternatievenTemplatesToolsOplossingenAPI-koppelingen
LocatiesHaarlemAmsterdamDen HaagEindhovenBredaAmersfoortAlle locaties
IndustrieënJuridischEnergieZorgE-commerceLogistiekAlle industrieën
MG Software.
HomeOver onsDienstenPortfolioBlogCalculator
Contact
MG Software
MG Software
MG Software.

MG Software ontwikkelt op maat gemaakte software, websites en AI-oplossingen die bedrijven helpen groeien.

© 2026 MG Software B.V. Alle rechten voorbehouden.

NavigatieDienstenPortfolioOver OnsContactBlogCalculator
DienstenOntwikkeling op maatSoftware koppelingenSoftware herontwikkelingApp laten ontwikkelenSEO & vindbaarheid
KennisbankKennisbankVergelijkingenVoorbeeldenAlternatievenTemplatesToolsOplossingenAPI-koppelingen
LocatiesHaarlemAmsterdamDen HaagEindhovenBredaAmersfoortAlle locaties
IndustrieënJuridischEnergieZorgE-commerceLogistiekAlle industrieën
MG Software.
HomeOver onsDienstenPortfolioBlogCalculator
Contact
MG Software
MG Software
MG Software.

MG Software ontwikkelt op maat gemaakte software, websites en AI-oplossingen die bedrijven helpen groeien.

© 2026 MG Software B.V. Alle rechten voorbehouden.

NavigatieDienstenPortfolioOver OnsContactBlogCalculator
DienstenOntwikkeling op maatSoftware koppelingenSoftware herontwikkelingApp laten ontwikkelenSEO & vindbaarheid
KennisbankKennisbankVergelijkingenVoorbeeldenAlternatievenTemplatesToolsOplossingenAPI-koppelingen
LocatiesHaarlemAmsterdamDen HaagEindhovenBredaAmersfoortAlle locaties
IndustrieënJuridischEnergieZorgE-commerceLogistiekAlle industrieën
MG Software.
HomeOver onsDienstenPortfolioBlogCalculator
Contact
  1. Home
  2. /Kennisbank
  3. /Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS

Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS

Row-level security filtert databaserijen op gebruikersrechten direct in PostgreSQL en is onmisbaar voor multi-tenant SaaS. Van tenant-isolatie via policies en RBAC-integratie tot Supabase RLS-configuratie: leer hoe RLS dataveiligheid afdwingt op infrastructuurniveau.

Row-Level Security (RLS) is een ingebouwde databasefunctie in PostgreSQL die op rijniveau bepaalt welke data een gebruiker mag lezen, aanmaken, wijzigen of verwijderen. Via declaratieve policies worden toegangsregels per tabel gedefinieerd die automatisch en transparant worden afgedwongen bij elke query, ongeacht de bron van het verzoek. RLS werkt op databaseniveau, volledig onafhankelijk van de applicatiecode, waardoor het een fundamentele verdedigingslaag vormt voor dataisolatie in multi-tenant SaaS-applicaties en compliance met privacywetgeving als de AVG.

Wat is Row-Level Security? - Uitleg & Betekenis

Wat is Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS?

Row-Level Security (RLS) is een ingebouwde databasefunctie in PostgreSQL die op rijniveau bepaalt welke data een gebruiker mag lezen, aanmaken, wijzigen of verwijderen. Via declaratieve policies worden toegangsregels per tabel gedefinieerd die automatisch en transparant worden afgedwongen bij elke query, ongeacht de bron van het verzoek. RLS werkt op databaseniveau, volledig onafhankelijk van de applicatiecode, waardoor het een fundamentele verdedigingslaag vormt voor dataisolatie in multi-tenant SaaS-applicaties en compliance met privacywetgeving als de AVG.

Hoe werkt Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS technisch?

RLS in PostgreSQL wordt geactiveerd per tabel met ALTER TABLE tablename ENABLE ROW LEVEL SECURITY. Zodra RLS is ingeschakeld, is de default-policy deny-all: geen enkele rij is zichtbaar tenzij er een expliciete policy bestaat die toegang verleent. Policies worden aangemaakt met CREATE POLICY en kunnen worden beperkt tot specifieke operaties: FOR SELECT, FOR INSERT, FOR UPDATE en FOR DELETE. Een typische multi-tenant policy filtert op tenant_id: CREATE POLICY tenant_isolation ON orders USING (tenant_id = current_setting('app.tenant_id')::uuid). Het USING-clause filtert welke rijen zichtbaar zijn, terwijl WITH CHECK valideert welke rijen mogen worden ingevoegd of gewijzigd. De gebruikerscontext wordt doorgaans ingesteld via SET LOCAL of set_config() aan het begin van elke request. In Supabase wordt de tenant_id automatisch afgeleid uit het JWT-token van de geauthenticeerde gebruiker. De auth.uid() functie retourneert de gebruikers-ID en auth.jwt() geeft toegang tot custom claims in het token. RLS integreert naadloos met Role-Based Access Control (RBAC). Policies kunnen condities combineren: een admin-rol ziet alle rijen, een gebruikersrol ziet alleen eigen data, en een viewer-rol ziet data van de gehele organisatie maar mag niets wijzigen. Dit wordt geimplementeerd via OR-condities of meerdere policies per tabel. Voor performance is het cruciaal dat de kolommen in RLS-policies geindexeerd zijn. Een policy op tenant_id zonder index op die kolom resulteert in een full table scan bij elke query. PostgreSQL past RLS-filters toe als extra WHERE-condities die door de query planner worden geoptimaliseerd samen met de originele query. De BYPASSRLS-privilege staat specifieke database-rollen toe om RLS te omzeilen, wat nodig is voor administratieve taken als migraties, data-exports en achtergrondprocessen. In Supabase is dit de service_role key die uitsluitend server-side mag worden gebruikt. Voor complexe autorisatiescenario's kunnen policies gebruikmaken van subqueries en functies. Een policy kan controleren of een gebruiker lid is van een specifiek team via een subquery op de team_members tabel. Security definer functies encapsuleren complexe autorisatielogica die vanuit meerdere policies wordt hergebruikt. Dit voorkomt duplicatie en maakt het autorisatiemodel centraal beheerbaar vanuit een beperkt aantal functies.

Hoe past MG Software Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS toe in de praktijk?

MG Software implementeert RLS in elke multi-tenant SaaS-applicatie die we bouwen op Supabase. Onze standaardaanpak begint met het activeren van RLS op alle tabellen die tenantdata bevatten, gecombineerd met een default-deny policy die voorkomt dat nieuwe tabellen per ongeluk onbeschermd blijven na een migratie. Policies worden gebaseerd op de tenant_id die we opslaan als custom claim in het Supabase JWT-token. Bij authenticatie wordt de tenant-context automatisch beschikbaar via auth.jwt()->'tenant_id'. Dit elimineert de noodzaak om tenant-filtering in applicatiecode te implementeren en garandeert isolatie ongeacht hoe de data wordt benaderd. Voor beheertaken en achtergrondprocessen gebruiken we de Supabase service_role key die RLS omzeilt. Deze key wordt uitsluitend server-side gebruikt in beschermde API-routes en achtergrondprocessen, nooit in client-side code. Bij elke nieuwe tabel documenteren we de verwachte RLS-policies in het migratiescript en testen we deze met geautomatiseerde tests die queries uitvoeren vanuit verschillende gebruikerscontexten om cross-tenant lekken te detecteren.

Waarom is Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS belangrijk?

Row-Level Security biedt een verdedigingslaag voor dataisolatie die onafhankelijk functioneert van de applicatiecode. In multi-tenant SaaS voorkomt RLS dat een bug, API-fout of verkeerde query per ongeluk data van andere tenants blootstelt. Dit is niet slechts een best practice maar een vereiste voor compliance met regelgeving als AVG/GDPR. Bij een beveiligingsaudit is RLS een concreet bewijsstuk dat dataisolatie op infrastructuurniveau is geimplementeerd. Zonder RLS is dataisolatie volledig afhankelijk van correcte WHERE-clausules in elke query van de applicatie. Een enkele vergeten filter in een nieuwe endpoint of een fout in een ORM-query kan leiden tot een datalek dat alle tenants treft. RLS verplaatst deze verantwoordelijkheid naar de database zelf, waar het consistent en automatisch wordt afgedwongen ongeacht hoe data wordt opgevraagd, of dat nu via de applicatie, een admin-tool of een directe databaseverbinding is.

Veelgemaakte fouten met Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS

Teams vergeten vaak RLS-policies te testen met verschillende gebruikerscontexten, waardoor permissielekken onopgemerkt blijven tot een beveiligingsaudit of incident. Schrijf geautomatiseerde tests die queries uitvoeren als gebruikers van verschillende tenants en valideer systematisch dat cross-tenant data onzichtbaar is voor zowel lees- als schrijfoperaties. Een tweede veelgemaakte fout is het niet instellen van een default-deny policy bij het activeren van RLS. Zonder expliciete default-deny zijn nieuwe tabellen zonder policies toegankelijk voor alle geauthenticeerde gebruikers. Stel altijd restrictive policies in als basis en verleen toegang alleen via expliciete GRANT-statements. Daarnaast worden performance-implicaties onderschat: policies op ongeindexeerde kolommen veroorzaken full table scans die de database progressief vertragen naarmate tabellen groeien. Voeg altijd een index toe op de kolom die in de RLS-policy wordt gefiltered.

Welke voorbeelden zijn er van Row-Level Security (RLS) in PostgreSQL: hoe dataisolatie werkt in SaaS?

  • Een multi-tenant SaaS-applicatie waarbij de orders-tabel een RLS-policy heeft die filtert op tenant_id. De policy gebruikt auth.jwt()->'tenant_id' om de huidige tenant te identificeren. Gebruikers van Organisatie A zien exclusief hun eigen orders, zelfs als de API per ongeluk geen tenant-filter toepast.
  • Een project management tool waarbij teamleden alleen projecten zien waartoe ze zijn uitgenodigd. De RLS-policy combineert tenant-isolatie met project-level toegang: USING (tenant_id = auth.jwt()->'tenant_id' AND id IN (SELECT project_id FROM project_members WHERE user_id = auth.uid())).
  • Een admin-dashboard dat de service_role key gebruikt om RLS te omzeilen voor cross-tenant rapportages en gebruikersbeheer. De service_role wordt uitsluitend aangeroepen vanuit een server-side API-route die zelf authenticatie en autorisatie afdwingt.
  • Een document-sharing feature waarbij een RLS-policy meerdere toegangsniveaus ondersteunt: eigenaren mogen lezen en schrijven, teamleden mogen lezen, en publiek gedeelde documenten zijn zichtbaar voor alle geauthenticeerde gebruikers binnen dezelfde tenant.
  • Geautomatiseerde RLS-tests in de CI/CD-pipeline die voor elke tabel verifieren dat een gebruiker van Tenant A geen data van Tenant B kan lezen, aanmaken of wijzigen. De tests gebruiken Supabase client libraries met tokens van verschillende testgebruikers.

Gerelateerde begrippen

single sign onpostgresqlcybersecurity

Meer lezen

KennisbankAVG/GDPR uitgelegd: wat de privacywetgeving betekent voor uw software en organisatieOAuth 2.0 uitgelegd: autorisatie, tokens, scopes en veilig inloggen zonder wachtwoordenDe meest complete gids voor security scan toolsSecurity Audit template die je uren bespaart

Gerelateerde artikelen

AVG/GDPR uitgelegd: wat de privacywetgeving betekent voor uw software en organisatie

De AVG (GDPR) verplicht organisaties om persoonsgegevens van EU-burgers te beschermen via privacy by design, verwerkingsregisters en strenge beveiligingsmaatregelen. Ontdek de eisen, boetes en technische implementatie.

API Beveiliging in het kort: van definitie en best practices tot implementatie

API-beveiliging beschermt tegen injection, broken auth en overbelasting. Leer hoe input validatie, rate limiting, OAuth 2.0 en de OWASP API Security Top 10 uw endpoints en data beschermen tegen veelvoorkomende aanvallen en datalekken.

Multi-tenant architectuur: hoe tenant-isolatie werkt in de praktijk

Multi-tenant architectuur laat een enkele applicatie meerdere klanten bedienen met strikt gescheiden data. Ontdek hoe je tenant-isolatie implementeert met Row Level Security en shared databases voor schaalbare SaaS.

Software voor de financiele sector: fintech, compliance en veilige portals op maat

Versnel onboarding, rapportage en controles zonder compliance te verliezen. Teams rapporteren vaak 30 tot 50 procent minder handmatige uren op periodieke AML- en KYC-checks zodra workflows, data lineage en auditlogs in een platform zitten.

Uit onze blog

OpenAI Codex Security Getest: 11.000 Bugs Gevonden, Maar Is Het Genoeg?

Sidney · 7 min leestijd

De juiste database kiezen voor uw project

Sidney · 7 min leestijd

Veelgestelde vragen

PostgreSQL biedt de meest volwassen en flexibele RLS-implementatie met CREATE POLICY, USING en WITH CHECK clausules die per operatietype kunnen worden geconfigureerd. SQL Server ondersteunt RLS via security predicates met een vergelijkbaar model dat inline table-valued functions gebruikt als filter. Oracle biedt Virtual Private Database (VPD) als equivalent met geavanceerde policy-opties. MySQL heeft geen ingebouwde RLS-functionaliteit, waardoor dataisolatie volledig in de applicatielaag moet worden geimplementeerd, wat het risico op fouten significant vergroot.
Schrijf geautomatiseerde tests die queries uitvoeren als gebruikers met verschillende rollen en tenant-contexten om alle permissiecombinaties te valideren. Verificeer dat een gebruiker van Tenant A geen data van Tenant B kan lezen, aanmaken, wijzigen of verwijderen via zowel directe queries als via de applicatie-API. Test ook edge cases: wat gebeurt er wanneer een tenant_id NULL is of wanneer een JWT-token verlopen is? Gebruik Supabase client libraries met verschillende JWT-tokens per testgebruiker. Integreer deze tests in je CI/CD-pipeline zodat ze bij elke deployment automatisch worden uitgevoerd.
RLS en application-level checks zijn complementair, niet alternatief, en moeten samen worden ingezet voor maximale beveiliging. RLS biedt defense-in-depth op databaseniveau die data beschermt ongeacht hoe of vanwaar queries worden uitgevoerd, inclusief directe databaseverbindingen en admin-tools. Application-level checks zijn nodig voor business logic, UI-feedback en fijnmazige autorisatie die niet in een databasepolicy past. De beste aanpak combineert beide: RLS als onzichtbaar vangnet op infrastructuurniveau en applicatielogica voor de gebruikerservaring.
Supabase maakt RLS-configuratie toegankelijk via een visuele editor in het dashboard en via directe SQL-statements in de query-editor. Bij elke request wordt het JWT-token van de geauthenticeerde gebruiker automatisch beschikbaar gesteld via auth.uid() voor de gebruikers-ID en auth.jwt() voor het volledige token met custom claims. Policies kunnen filteren op user_id, tenant_id als custom claim, of specifieke rollen uit het token. De service_role key omzeilt RLS volledig voor administratieve taken als migraties en data-exports, en mag uitsluitend server-side worden gebruikt.
RLS voegt extra WHERE-condities toe aan elke query, die door de PostgreSQL query planner samen met de originele query worden geoptimaliseerd tot een efficienten execution plan. Met een index op de kolom in de RLS-policy, typisch tenant_id, is de performance-impact minimaal en in de meeste gevallen niet meetbaar. Zonder index ontstaat een full table scan bij elke query die de database progressief vertraagt naarmate de tabel groeit. Monitor queryplannen met EXPLAIN ANALYZE na het activeren van RLS om te verifieren dat indexen correct worden gebruikt.
Definieer meerdere policies per tabel die verschillende rollen bedienen met elk hun eigen toegangsniveau. Een admin-policy geeft toegang tot alle rijen binnen de tenant voor volledig beheer. Een user-policy beperkt toegang tot uitsluitend eigen data. Een viewer-policy staat alleen SELECT toe zonder schrijfrechten. PostgreSQL evalueert alle policies met OR-logica: als een van de policies toegang verleent, is de rij zichtbaar. Gebruik descriptieve policy names en comments om het overzicht te bewaren bij complexe configuraties met meerdere rollen.
USING filtert welke bestaande rijen zichtbaar zijn voor SELECT, UPDATE en DELETE queries en bepaalt dus het leesbare bereik van de gebruiker. WITH CHECK valideert welke waarden mogen worden ingevoegd bij INSERT of gewijzigd bij UPDATE, waarmee het schrijfbare bereik wordt beperkt. Een policy kan beide clausules combineren: USING bepaalt dat je alleen je eigen rijen ziet, terwijl WITH CHECK voorkomt dat je een rij aanmaakt met een tenant_id die niet bij jouw organisatie hoort. Zonder expliciete WITH CHECK wordt het USING-clause als fallback gebruikt voor de validatie.

Wij bouwen hier dagelijks mee

Dezelfde expertise die u leest, zetten wij in voor klanten.

Ontdek wat wij kunnen doen

Gerelateerde artikelen

AVG/GDPR uitgelegd: wat de privacywetgeving betekent voor uw software en organisatie

De AVG (GDPR) verplicht organisaties om persoonsgegevens van EU-burgers te beschermen via privacy by design, verwerkingsregisters en strenge beveiligingsmaatregelen. Ontdek de eisen, boetes en technische implementatie.

API Beveiliging in het kort: van definitie en best practices tot implementatie

API-beveiliging beschermt tegen injection, broken auth en overbelasting. Leer hoe input validatie, rate limiting, OAuth 2.0 en de OWASP API Security Top 10 uw endpoints en data beschermen tegen veelvoorkomende aanvallen en datalekken.

Multi-tenant architectuur: hoe tenant-isolatie werkt in de praktijk

Multi-tenant architectuur laat een enkele applicatie meerdere klanten bedienen met strikt gescheiden data. Ontdek hoe je tenant-isolatie implementeert met Row Level Security en shared databases voor schaalbare SaaS.

Software voor de financiele sector: fintech, compliance en veilige portals op maat

Versnel onboarding, rapportage en controles zonder compliance te verliezen. Teams rapporteren vaak 30 tot 50 procent minder handmatige uren op periodieke AML- en KYC-checks zodra workflows, data lineage en auditlogs in een platform zitten.

Uit onze blog

OpenAI Codex Security Getest: 11.000 Bugs Gevonden, Maar Is Het Genoeg?

Sidney · 7 min leestijd

De juiste database kiezen voor uw project

Sidney · 7 min leestijd

MG Software
MG Software
MG Software.

MG Software ontwikkelt op maat gemaakte software, websites en AI-oplossingen die bedrijven helpen groeien.

© 2026 MG Software B.V. Alle rechten voorbehouden.

NavigatieDienstenPortfolioOver OnsContactBlogCalculator
DienstenOntwikkeling op maatSoftware koppelingenSoftware herontwikkelingApp laten ontwikkelenSEO & vindbaarheid
KennisbankKennisbankVergelijkingenVoorbeeldenAlternatievenTemplatesToolsOplossingenAPI-koppelingen
LocatiesHaarlemAmsterdamDen HaagEindhovenBredaAmersfoortAlle locaties
IndustrieënJuridischEnergieZorgE-commerceLogistiekAlle industrieën