Ga naar inhoud
labs.kadaster.nl | federatief.datastelsel.nl

Subgraph

Voor het Lock-Unlock project is ook een simpele demonstrator ontwikkeld voor de Subgraph implementatie. Deze toont aan dat een autorisatie-beleid afgedwongen kan worden op een SPARQL-endpoint zonder dat queries hier uitzonderlijk traag van worden. De ervaringen die hiermee zijn opgedaan zijn deels verder geïntegreerd in de demonstrator. Verdere conclusies en aanbevelingen worden besproken in het hoofdstuk evaluatie.

Hieronder worden een aantal voorbeelden gegeven van queries die wel/niet zijn toegestaan voor specifieke gebruikers. Al deze queries kunnen uitgevoerd worden in de demonstrator op subgraph.dst.test.cloud.kadaster.nl. Verschillende registers kunnen aangeroepen worden door het endpoint als volgt aan te passen:

  • ANBI: https://subgraph.dst.test.cloud.kadaster.nl/anbi/sparql?persona=h_de_vries
  • BRK: https://subgraph.dst.test.cloud.kadaster.nl/brk/sparql?persona=h_de_vries
  • BRP: https://subgraph.dst.test.cloud.kadaster.nl/brp/sparql?persona=h_de_vries
  • NHR: https://subgraph.dst.test.cloud.kadaster.nl/nhr/sparql?persona=h_de_vries

Algemene Bedrijfsgegevens

De algemene bedrijfsgegevens uit het NHR zijn openbaar beschikbaar, dus ook niet-geautoriseerde gebruikers kunnen deze opvragen. Deze query zal dus resultaten geven ongeacht welke gebruiker deze uitvoert. Echter is toegang tot de UBO-gegevens beperkt zodat deze enkel toegankelijk zijn in de context van een politieonderzoek. De kolom ?ubo zal dus leeg blijven tenzij de query wordt uitgevoerd door Ferdinand van As (een politiemedewerker).

PREFIX nhr: <https://data.federatief.datastelsel.nl/lock-unlock/nhr/def/>

SELECT ?naam ?rechtsvorm ?kvkNr ?ubo WHERE {
  ?inschrijving a nhr:Inschrijving.
  OPTIONAL { ?inschrijving nhr:bedrijfsnaam ?naam. }
  OPTIONAL { ?inschrijving nhr:rechtsvorm ?rechtsvorm. }
  OPTIONAL { ?inschrijving nhr:kvkNummer ?kvkNr. }
  OPTIONAL { ?inschrijving nhr:heeftUBO ?ubo. }
} LIMIT 10

Als deze query wordt uitgevoerd als ongeauthoriseerde gebruiker, zal het resultaat er als volgt uit zien.

naam rechtsvoorm kvkNr ubo
Noten Eenmanszaak Eenmanszaak 44812469
Duijndam VOF VOF 9945351
Welten BV BV 100498427
Langeveld BV BV 123274139
Bouthoorn VOF VOF 112709985
Schellekens NV NV 10272019
Wessels VOF VOF 71071932
Roeterdink Eenmanszaak Eenmanszaak 13673037
van Cruchten Eenmanszaak Eenmanszaak 53937500
Alberti BV BV 42847358

Inwonersaantallen per Gemeente

Een van de doelen van Lock-Unlock is het ondersteunen van statistische queries waar de onderliggende data afgeschermd moet blijven. Denk hierbij bijvoorbeeld aan het inwonersaantal van een of meerdere gemeentes. Dit wordt met de onderstaande query gedemonstreerd. Om dit mogelijk te maken, zijn de verblijfplaatsen van personen openbaar toegankelijk. Dit lijkt in eerste instantie misschien op ongeautoriseerde datatoegang, maar gezien enkel de verblijfsplaats wordt ontsloten, is het niet mogelijk de ideniteit van een individueel persoon te achterhalen. Dit blijft natuurlijk wel een punt van aandacht wanneer een systeem als hier gedemonstreerd in productie wordt gebracht. Door overlappende beveiligingsregels kan het onbedoeld toch mogelijk worden om de identiteit van personen te achterhalen.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX brp: <https://data.federatief.datastelsel.nl/lock-unlock/brp/def/>

SELECT ?naam ?inwonersAantal WHERE {
  ?gemeente rdfs:label ?naam.
  {
    SELECT ?gemeente (COUNT(*) AS ?inwonersAantal) WHERE {
      ?persoon brp:heeftVerblijfsplaats ?gemeente.
    } GROUP BY ?gemeente
  }
} ORDER BY ?naam
naam inwonersAantal
's-Graveland 92
's-Gravendeel 103
's-Gravenhage 100
's-Gravenmoer 100
's-Gravenzande 108
...

Inwoners van Zeewolde

Deze query lijkt heel erg op de vorige, en vraagt specifiek de inwoners van Zeewolde op. Echter vraagt deze query ook wat de namen van de inwoners zijn, er is dus een zekere mate van autorisatie nodig. In de demonstrator zijn er twee scenario's waarin de naam van een gebruiker mag worden opgehaald. Dit mag gebeuren in de context van een politieonderzoek, via onze fictieve gebruiker Ferdinand van As. Ook is het mogelijk voor ambtenaren om de inwoners van hun gemeente te bekijken. Alleen Marjolein van Groen (medewerker Gemeente Zeewolde) mag dit dus doen. Wanneer Jeroen Peerenboom (medewerker Gemeente Almere) dit zou proberen, krijgt hij geen resultaten. Zou de gemeente-URI worden aangepast naar brk-gem:25, dan krijgt Jeroen Peerenboom juist resultaten en heeft Marjolein van Groen geen toegang.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX brk-gem: <https://brk.basisregistraties.overheid.nl/brk2/id/kadastraleGemeente/>
PREFIX brp: <https://data.federatief.datastelsel.nl/lock-unlock/brp/def/>

SELECT * WHERE {
  ?persoon brp:heeftVerblijfsplaats brk-gem:1156;
           rdfs:label ?naam.
} LIMIT 10
persoon naam
brp:geregistreerd-persoon/1d29a2b2-84fe-438e-8f62-64ac38a275e1 Nathan Roersma
brp:geregistreerd-persoon/122d863a-2cc4-4596-b4ce-4ecb59fb511f Ellen Campfens
brp:geregistreerd-persoon/060fccb4-855d-4676-aa4d-59ac3f726b4e Dana Reuvekamp
brp:geregistreerd-persoon/e14ab059-00f2-472e-8d1e-8a0a9fc2b7ca Marijn Bakels
brp:geregistreerd-persoon/44ed4149-d41d-49ca-9740-a09b4137b9f7 Alicia van Groeningen
brp:geregistreerd-persoon/2a31221d-3ae5-4e63-8584-ccd005232489 Vincent van Melis
brp:geregistreerd-persoon/d4a3acdf-2513-41cd-aa80-6e07d8cb64af Franciscus van der Aalst
brp:geregistreerd-persoon/a96cb8ce-911d-4553-95a5-e809ede262f9 Cynthia Buitelaar
brp:geregistreerd-persoon/20dc12af-69be-46d8-9a59-405d3c6d2404 Maaike Jellema
brp:geregistreerd-persoon/bca7aa84-9de4-4a35-adad-c413d867e8ef Daisy Reitsma

UBOs van Bedrijven

Een van de krachtigste mogelijkheden van SPARQL is het federatief bevragen van datasets. In de onderstaande query koppelen we het NHR en de BRP om de naam en geboortedatum van de UBO van een bedrijf te bepalen. Het gedeelte van de query wat uitgevoerd wordt aan de BRP-kant staat in het SERVICE-blok, waar de persoons-URI wordt gebruikt om de naam en geboortedatum te bepalen.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX brp: <https://data.federatief.datastelsel.nl/lock-unlock/brp/def/>
PREFIX nhr: <https://data.federatief.datastelsel.nl/lock-unlock/nhr/def/>

SELECT * WHERE {
  ?bedrijf nhr:heeftUBO ?ubo.
  SERVICE <http://localhost:8080/brp/sparql?persona=f_van_as> {
      ?ubo rdfs:label ?naam;
           brp:geboortedatum ?geboortedatum.
    }
} LIMIT 10
bedrijf ubo naam geboortedatum
nhr:inschrijving/35af1729-bb46-4394-b3a0-e2b8e8103f4e brp:geregistreerd-persoon/9b335fdf-8197-4c32-873b-9390038f20e0 Kevin Jordens 1967-06-25
nhr:inschrijving/ae17ce08-f7c8-4389-bc3e-1c9153d1aa1c brp:geregistreerd-persoon/13de1f66-dce3-4bbf-b600-e3500d555474 Jules van Gorkom 1984-08-19
nhr:inschrijving/3b41d2f1-11bf-4479-b374-679750425073 brp:geregistreerd-persoon/0c8f8ea5-0cb1-4bba-8ace-6079ccc57faa Marinus Zwiggelaar 1965-06-13
nhr:inschrijving/ff2776ca-af9d-4f1b-8a9c-5a2dfa84ed3b brp:geregistreerd-persoon/b5c10e6e-9c06-4072-9d4e-78f2f603ad6f Julius van Gijzen 1987-11-01
nhr:inschrijving/41fa977a-0276-4c0b-a66e-22b27020d5a9 brp:geregistreerd-persoon/49e3bc54-f47a-499b-87af-663fb6863ba7 Alexandra Giesberts 1966-01-27
nhr:inschrijving/3235c199-abd3-46d4-a658-227c339712ac brp:geregistreerd-persoon/d4ed5e54-d7a3-44cf-b7a0-a20fb98ec909 Pepijn Mager 2002-09-12
nhr:inschrijving/08731853-fd78-4b41-b4a3-d9328d2c2aac brp:geregistreerd-persoon/c4e4ccb1-2390-4005-9cc0-8a280973ce15 Barbara Landkroon 1989-10-16
nhr:inschrijving/795b39a8-09d0-433d-8d18-765f8bf832cc brp:geregistreerd-persoon/b632fa65-0708-40ea-b5d9-57b577b3a7d5 Gerard van Casteren 1961-10-12
nhr:inschrijving/dacb3a70-f9a0-4512-8b1b-f4f42d7631ba brp:geregistreerd-persoon/921ad989-c2d7-4a4e-aaca-1b19c1141f8e Jos Engel 1993-03-04
nhr:inschrijving/e72ea78f-6eaa-4db6-84c9-71aa740d1f96 brp:geregistreerd-persoon/e27ce142-3aed-468d-96cf-60325a8ba757 Roel Kloos 1963-06-20

Autorisatie-beleid

Gezien het autorisatie-beleid ook wordt uitgedrukt als Linked Data, is het mogelijk deze te bevragen via SPARQL. Met deze query worden alle beveiligingsregels getoond en voor welke gebruikers deze van toepassing zijn.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sse: <https://data.federatief.datastelsel.nl/lock-unlock/authorisation/model/def/>

SELECT (GROUP_CONCAT(?name; SEPARATOR=", ") AS ?personas) ?rule ?subject ?condition WHERE {
  ?rule a sse:AccessRule;
        sse:subject ?subject;
        sse:condition ?condition.
  ?persona sse:extends*/sse:has_rule ?rule;
           rdfs:label ?name.
} GROUP BY ?rule ?subject ?condition
personas rule subject condition
Ferdinand van As brp-auth:alle_gegevens ?s ?p ?o
Ferdinand van As, Henk de Vries, Marjolein Groen, Jessica Jansen, Jeroen Peerenboom brp-auth:gemeenteaanduidingen ?node rdfs:label ?name FILTER (strstarts(str(?node), 'https://brk.basisregistraties.overheid.nl/brk2/id/kadastraleGemeente/'))
Jeroen Peerenboom brp-auth:inwoners_almere ?persoon ?predicate ?value. ?persoon brp:heeftVerblijfsplaats brk:kadastraleGemeente/25.
Marjolein Groen brp-auth:inwoners_zeewolde ?persoon ?predicate ?value. ?persoon brp:heeftVerblijfsplaats brk:kadastraleGemeente/1156.
Ferdinand van As, Henk de Vries, Marjolein Groen, Jessica Jansen, Jeroen Peerenboom brp-auth:statistische_gegevens ?persoon brp:heeftVerblijfsplaats ?plaats

Logging

Om achteraf te inzage te hebben in wat gebruikers hebben opgevraagd, worden alle queries gelogd in de triplestore. Deze data kan ook weer als linked data worden bevraagd. De onderstaande query geeft een kleine inzage in de gelogde gegevens. In de demonstrator zijn deze gegevens openbaar toegankelijk, maar in een productie-versie is het waarschijnlijk wenselijk om ook een autorisatie-beleid af te dwingen op deze data.

PREFIX log: <https://data.federatief.datastelsel.nl/lock-unlock/logging/model/def/>

SELECT ?timestamp ?user ?endpoint ?duration ?query WHERE {
  ?event log:startDate ?timestamp;
         log:by_user ?user;
         log:endpoint ?endpoint;
         log:processingtime ?duration;
         log:sparqlquery ?query.
} ORDER BY DESC(?timestamp) LIMIT 25
timestamp user endpoint duration query
2024-04-21T10:01Z h_de_vries brp 476 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> [...]