LISTEN / NOTIFY-Berechtigungen

9

Ich habe eine einzelne Postgres-Datenbank mit zwei Benutzern. Alice und Bob.

Ich würde gerne in der Lage sein, dies zu tun, NOTIFY alice_channel 'sensitive data'ohne dass Bob sich LISTENeinschleichen kann, indem er einfach vermutet, dass der Kanalname 'alice_channel' ist.

In der Praxis wird die Kanalnamen sind sehr schwer zu erraten, aber das ist Sicherheit durch Unklarheit am besten.

Habe ich Recht, wenn ich glaube, dass es keine Möglichkeit gibt, einen Datenbankbenutzer daran zu hindern, LISTEN& zu verwenden (zu missbrauchen) NOTIFY? dh es scheint keine zugehörigen Berechtigungen zu geben, die gewährt oder widerrufen werden können.

Ist das eine Sackgasse?

Chris Farmiloe
quelle
Ich kenne keine Möglichkeit, Benutzer vom Zuhören auszuschließen. Aber wenn Sie einen Namen für den Kanal auswählen, als würden Sie ein sicheres Passwort auswählen, würde dies nicht den Job machen?
Erwin Brandstetter
Ja, das ist es, was ich im Moment mache (mit großen zufälligen Zeichenfolgen), aber es fühlt sich schmutzig an und ist ziemlich einschränkend. Es gibt einige ziemlich coole Dinge, die ich damit machen könnte LISTEN/ NOTIFYwenn ich es ein bisschen abschließen könnte. So wie es aussieht, ist es eine ziemlich körnige Funktion, die einen Client dazu bringt, alle Daten, die Sie möglicherweise benötigen, erneut abzufragen.
Chris Farmiloe
Ich wollte nur wissen, ob sich die Dinge geändert haben, seit dies beantwortet wurde. Konnten Sie etwas implementieren?
Phill Pafford
Wenn Sie Ihren Apps nicht vertrauen können, sollten Sie sie nicht zulassen. Ich denke, es ist eine Sackgasse im Produktionssystem. Es wurde jedoch ein Vorschlag für verwandte Privilegien gemacht. postgresql.org/message-id/51CC98FB.9040700%40agliodbs.com
Anssi

Antworten:

4

Es gibt keine Berechtigungen für LISTENund NOTIFY. Es wäre nicht sinnvoll gewesen, eine zu haben, bis die Unterstützung für Benachrichtigungsnutzdaten in neueren Versionen eingeführt wurde.

Wenn Sie die Zugriffssteuerung wünschen, erstellen Sie eine Tabelle mit den gewünschten Informationen und senden Sie dann eine Tabelle NOTIFY, die leer ist oder nur einen Primärschlüssel für diese Tabelle enthält. SELECTdie interessierenden Zeilen aus der Tabelle, die über eine Zugriffssteuerung verfügen können, um die vertraulichen Daten abzurufen. Dies war früher die einzige Möglichkeit , bestimmte Daten zu verwenden LISTENund NOTIFYzu senden, bevor Nutzdaten hinzugefügt wurden.

Craig Ringer
quelle
Danke Craig, das habe ich mir gedacht. Ich könnte einen Blick auf die Quelle werfen und sehen, wie schwierig es sein wird, sie zu implementieren, aber ich schätze, es wird eine völlig neue Datenbankebene erfordern AclModeund pg_database_aclcheckirgendwo anrufen. Es ist eine Weile her, seit ich
nachgesehen