So binden Sie eine Fachanwendung an
Eine Access-Fachanwendung mit VBA liest Stammdaten, bucht Vorgänge über Prozeduren und soll dabei für die Datenbank erkennbar unter der Person arbeiten, die sie bedient. Sie soll nur ihre eigenen Objekte erreichen, nicht alles, was die Person sonst darf.
Lösungsübersicht
Der Dienst kennt die Person, nicht das Programm: Eine Anfrage aus der Fachanwendung und eine aus Excel derselben Person sehen für ihn gleich aus. Die Fachanwendung grenzen Sie deshalb über ihren eigenen Alias und eine Regel für diesen Alias ab; die Person geben Sie an SQL Server weiter, damit Prozeduren, Trigger und Sichten wissen, wer handelt.
| Mittel | Wirkung |
|---|---|
Eigener Alias für die Fachanwendung (fachanwendung) auf dieselbe Datenbank | Rechte dieses Wegs getrennt von Berichten und anderen Anwendungen |
| Regel mit mehreren Einträgen je Alias | Lesen hier, Schreiben über Prozeduren dort (siehe Reichweite je Alias) |
Persons: Impersonate und eigene Anmeldung je Person, oder SESSION_CONTEXT(N'wkl.person') | Die Datenbank kennt die handelnde Person |
Geprüfte Anweisungen statt sql | Eigene Abfragen der VBA-Klasse, Objekt für Objekt gegen die Regel geprüft |
Umsetzung
- Alias anlegen (
DataSources) mit einem Namen, der die Anwendung nennt, und auf WunschPersons: Impersonate; siehe So geben Sie Personen an SQL Server weiter. Regel für die Anwendung nur auf ihre Objekte:
[ { "Id": "fachanwendung-auftrag", "Databases": [ "fachanwendung" ], "Resources": [ "views", "procedures" ], "Objects": [ "auftrag.*" ], "Verbs": [ "GET", "POST" ], "ReadOnly": false } ]Ordnen Sie sie den Personen oder ihrer Windows-Gruppe zu (
PersonRules,WindowsAccounts).- In Access verknüpfen über den ODBC-Treiber mit dem Alias
fachanwendung; am Firmen-PC mit dem Windows-Konto, von außen mit einem persönlichen Schlüssel und Code. - Eigene Abfragen der VBA-Klasse schalten Sie als geprüfte Anweisungen frei, nicht mit dem Recht
sql; siehe So schalten Sie eigene Anweisungen frei. - Prüfen: In SQL Server zeigt
SUSER_SNAME()(mitImpersonate) bzw.SESSION_CONTEXT(N'wkl.person')die Person;AuditEntriesnennt je Anfrage Person, Alias und Objekt. Ein Objekt außerhalb vonauftrag.*beantwortet der Dienst über diesen Alias mit404.
Ergebnis: Die Fachanwendung erreicht über ihren Alias nur ihre Objekte; die Datenbank weiß bei jeder Buchung, welche Person sie ausgelöst hat.
Hinweise
- Keine eigene Kennung für die Anwendung. Ein Schlüssel gehört immer einer Person oder einem Dienst. Ein anderes Programm derselben Person mit demselben Alias erreicht dasselbe. Wo das nicht genügt, entscheidet die Datenbank: Schreiben nur über Prozeduren, die ihre Regeln selbst prüfen.
- Dienstschlüssel sind für Programme ohne Person (Schnittstellen, nächtliche Abgleiche); sie wechseln nie die Identität.
- Die VBA-Klasse und ihre Anmeldung beschreibt „WklGatewayClient – VBA-Klasse für den Datendienst“ (Dokumentation der Verwaltungsanwendung).