2016-04-28 27 views
0

Es gibt zwei Modelle in meiner Datenbank: Business und Brand. Jedes Unternehmen hat einen oder mehrere Zugriffe auf mehrere Marken, z. B. Lesen, Aktualisieren und Löschen.So implementieren Sie ACL in Postgresql

Ich bin mir nicht sicher, was der beste Weg ist, um die Zugangskontrolle zu implementieren. Vorerst habe ich eine Verbindungstabelle mit mehreren Feldern erstellt: business_id, brand_id, can_read, can_update, can_delete, und wann immer etwas unternommen wird, überprüfe ich diese Tabelle.

Allerdings erkannte ich, dass ein solcher Ansatz in der Anwendungsebene ist, nicht in der Datenbankebene.

Meine Frage ist, gibt es einen Ansatz, um solche Zugriffskontrolle in der Datenbankebene zu implementieren?

Ich habe "ACL in Postgresql" gegooglet, aber die Ergebnisse sind alles über die Konten der Datenbank selbst, nicht die Daten, die es speichert.

Bitte helfen!

+1

welche Version von PG? –

Antwort

-1

Ihr Startpunkt sollte der grant Befehl in Postgres sein.
Ich würde normalerweise empfehlen, jedem Geschäft zu erlauben/zu gewähren, nur um auf eine spezifische Ansicht mit allen seinen relevanten Daten zuzugreifen.
Tabellen sollten nur für den Administrator zugänglich sein.

+0

Vielleicht drücke ich meine Frage nicht klar aus. GRANT soll den Datenbankbenutzern PRIVILEGES erteilen, aber ich möchte den Zugriff auf Datensätze der Datenbank kontrollieren. Schließlich kann ich 10000 Datenbankbenutzer für 10000 Geschäftsdatensätze nicht erstellen, die in der Datenbank gespeichert werden. – HanXu

+0

Sie haben eine Datenbank und einen Tabellensatz. Jedes Unternehmen hat einen bestimmten DB-Benutzer und hat Zugriff auf seine eigenen Sichten, bei denen es sich um Tabellen handelt, die für jedes Unternehmen gefiltert werden. – weismat

+0

Das OP fragt, wie Geschäftslogikberechtigungen in SQL modelliert werden und nicht, wie der Zugriff auf ein DB-Objekt beschränkt wird. –

-1

Sie sollten Sicherheitsrichtlinien auf Zeilenebene in Betracht ziehen. Dies ist eine neue Funktion in PostgreSQL Version 9.5.

Weitere Informationen finden Sie unter Row Security Policies.

+0

Dies ist für Datenbankbenutzer. Das OP fragt, wie Geschäftslogik auf SQL-Ebene modelliert werden kann. –

+0

Ja, Sicherheitsrichtlinien auf Zeilenebene sind auf SQL-Ebene definiert. Das OP hat bereits eine Tabelle, die die Regeln für jeden Benutzer definiert (can_read, can_update, can_delete), jetzt braucht er eine Möglichkeit, diese Regeln in der Datenbank zu erzwingen (im Gegensatz zur Durchsetzung der Regeln in seiner Anwendungslogik). Das ist, was eine Sicherheitsrichtlinie auf Zeilenebene für die Durchsetzung der Regeln in der Datenbank ist. – korry

Verwandte Themen