2009-07-13 19 views
2

Ich entwickle gerade eine kleine Datenbankanwendung, für die wir in der nächsten Zeit den Zugriff auf mehrere Benutzer planen.So implementieren Sie die Datenbankzugriffssteuerung auf Zeilenbasis

Die Datenbank enthält hauptsächlich Projekte (in einer Projekttabelle) mit einigen verbundenen Tabellen, die zusätzliche Informationen enthalten.

Eine Anforderung unserer Kunden in Bezug auf Multi-User-Operationen ist eine fein abgestufte Zugriffskontrolle, die hauptsächlich auf Projektebene basiert (d. H. Benutzer haben nur Zugriff auf einige Projekte). Ich frage mich, wie ich das umsetzen kann.

Was die Situation etwas schwieriger macht, ist, dass der Datenbankzugriff hauptsächlich in einer selbstentwickelten Persistenzschicht erfolgt, die die benötigten SQL-Abfragen (ähnlich wie nhibernate) erstellt.

Die einzige Lösung, die ich finden könnte, ist die Implementierung von gespeicherten Prozeduren (oder Sichten für Lesezugriff?) In der Datenbank, die die Zugriffsprüfungen implementieren. Da unsere derzeit Persistenz-Schicht auf Tabellen auf vollen Zugang beruht würde dies bedeuten, eine Leseansicht, einen Einsatz und ein Löschbefehl für jede Tabelle implementieren und die Persistenz-Schicht ändern, um diese Befehle zu verwenden (anstelle INSERT des Konstruierens/DELETE-Abfragen) .

Ich frage mich, ob es gibt eine andere Lösung erfordert nicht unseren Code zu ändern ...

Antwort

1

Dergleichen kann eine Herausforderung sein Recht zu bekommen. Anforderungen wie diese sind unter anderem ein Grund, auf einem gepackten System aufzubauen - sie haben bereits behobene Fehler, die Sie noch nicht geschrieben haben.

Wenn Sie es auf eigene Faust zu tun haben, dann empfehle ich Ihnen auf immer den Sicherheitsaspekt richtig konzentrieren, und sorgen sich um später den Code zu ändern. Sie möchten die Sicherheit nicht gefährden, weil Sie Ihren Code nicht ändern möchten.

Möglicherweise können Sie veranlassen, dass eine einzelne zusätzliche Information an die gespeicherten Prozeduren übergeben wird. Abhängig von Ihrer SQL Server-Version könnte dies ein Stück XML oder ein Tabellenwert sein. Es würde alle Informationen enthalten, die notwendig sind, um den Zugriff zu bestimmen, den der Benutzer haben sollte. Vielleicht nur eine Benutzerkennung, aber wer weiß?

Sie würden wollen Ansichten erstellen und/oder Tabellenwertfunktionen, die diese Informationen verwendet, um die Menge von Zeilen basierend auf Zugang zurück zu filtern.

1

Ein einfacher (aber primitiver) Ansatz ist die Erstellung eines VIEW für jede Gruppe von Benutzern unter Verwendung der WITH CHECK OPTION. Möglicherweise müssen Sie auch INSTEAD OF Trigger für diesen VIEW s komplexere Logik für INSERT, UPDATE und DELETE Operationen zu ermöglichen.

Verwandte Themen