Farbschema: Hell
Sie befinden sich hier: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL Database Gateway » Anleitungen » So beschränken Sie Vermittler auf ihre Kunden

So beschränken Sie Vermittler auf ihre Kunden

Ein Versicherungsvermittler arbeitet von seinem eigenen Laptop aus. Er soll die Kunden- und Vertragsdaten seiner Kunden lesen, ohne Gesundheitsangaben und Bankverbindung, befristet und jederzeit widerrufbar. Den Rest des Bestands soll er nicht einmal sehen.

Lösungsübersicht

Drei Schichten, jede an der Stelle, die sie zuverlässig durchsetzt:

SchichtWoWas sie begrenzt
Sicht je ZweckDatenbankZeilen (nur Kunden dieses Vermittlers) und Spalten (ohne schutzwürdige Felder)
Regel auf die SichtDienstNur diese Sicht, nur lesen; alle anderen Objekte gibt es für den Vermittler nicht
Persönlicher SchlüsselDienstEin Alias, nur lesend, befristet, mit Code von außen, einzeln sperrbar

Die Sicht erkennt den Vermittler am Sitzungskontext: Für jede Anfrage mit persönlichem Schlüssel setzt der Dienst SESSION_CONTEXT(N'wkl.person') schreibgeschützt auf den Namen der Person (siehe Zeilenweise Einschränkung).

Umsetzung

  1. Zuordnung Vermittler – Kunde in der Datenbank, etwa eine Tabelle iam.vermittler_kunde (person_name, kunde_id), gepflegt von der Fachanwendung.
  2. Sicht anlegen, die nur zugeordnete Kunden und nur freigegebene Spalten zeigt:

    CREATE VIEW vermittler.kunde_vertrag AS
    SELECT k.kunde_id, k.name, k.ort, v.vertrag_id, v.produkt, v.beginn, v.beitrag
    FROM dbo.kunde AS k
    JOIN dbo.vertrag AS v ON v.kunde_id = k.kunde_id
    WHERE EXISTS (SELECT 1 FROM iam.vermittler_kunde AS vk
                  WHERE vk.kunde_id = k.kunde_id
                    AND vk.person_name = CAST(SESSION_CONTEXT(N'wkl.person') AS nvarchar(256)));

    Gesundheitsangaben und Bankverbindung stehen nicht in der Sicht; für den Vermittler gibt es sie damit nicht.

  3. Regel nur auf die Sicht, nur lesend (in der Verwaltung als ClientRules/ClientRuleItems):

    { "Id": "vermittler", "Databases": [ "bestand" ], "Resources": [ "views" ],
      "Objects": [ "vermittler.kunde_vertrag" ], "Verbs": [ "GET" ], "ReadOnly": true }

    Ordnen Sie die Regel jeder Vermittler-Person zu (PersonRules). Nicht das Recht sql geben: Mit einer eigenen Anweisung erreichte der Vermittler alles, was die Anmeldung des Alias erreicht, auch die Tabellen hinter der Sicht.

  4. Schlüssel je Vermittler mit issue-key, befristet auf die Vertragsdauer:

    { "person": "Max Vermittler", "label": "Laptop", "expiresAt": "2027-06-30T00:00:00Z",
      "readOnly": true, "databases": [ "bestand" ], "delivery": "mail" }

    Für Zugriffe von außen gilt die Regel „Schlüssel von außen nur mit Code“ aus Private Geräte zulassen.

  5. Prüfen mit dem Schlüssel des Vermittlers: Das Dienstdokument (/odata/v4/bestand/vermittler/) nennt nur kunde_vertrag; eine Abfrage liefert nur seine Kunden; eine Anfrage an /odata/v4/bestand/dbo/kunde beantwortet der Dienst mit 404. Mit dem Schlüssel eines zweiten Vermittlers erscheinen dessen Kunden.

Ergebnis: Jeder Vermittler liest nur seine Kunden ohne schutzwürdige Felder, nur über diese Sicht, bis zum Ablauf seines Schlüssels.

Hinweise

  • Der Name ist die Verbindung. wkl.person ist der Name der Person in der Verwaltung; wird sie umbenannt, muss die Zuordnung mitgehen. Wer das vermeiden will, gibt jeder Person eine eigene SQL-Anmeldung, stellt den Alias auf Persons: Impersonate und filtert über SUSER_SID() (Beispiel 1 unter Zeilenweise Einschränkung).
  • Spalten in $metadata. Die Sicht zeigt ihre Spalten allen, die sie sehen dürfen; was nicht in der Sicht steht, erscheint nirgends.
  • Weitergabe der Daten. Was der Vermittler gelesen hat, liegt auf seinem Gerät. Begrenzen Sie die Sicht deshalb auf das, was er für seine Arbeit braucht.

Verwandte Themen

de/wiki/data-conectivity/database-gateway/how-to/restrict-agents-to-their-customers.txt · Zuletzt geändert: von Wolfgang van der Stille