2016-07-26 25 views
-1

Während die aktuelle Verbindung zu db1 hergestellt wird, möchte ich die Berechtigungen auf db2 ändern. Wie:Wie spezifiziert man den Datenbanknamen im GRANT-Befehl?

Aber dies führt zu einem Fehler, und PostgreSQL erkennt die Datenbank Qualifier in der Aussage nicht! Gibt es eine Möglichkeit, dies zu tun, ohne die Verbindung zu db1 zu trennen und die Verbindung zu db2 wiederherzustellen?

BTW, ich beginne diese Befehle von einer Programmiersprache und nicht die psql.

[UPDATE]

Wie ich in den Kommentaren gesagt wurde, scheint es, dass diese Funktion absichtlich blockiert wird (aufgrund Implementierung Herausforderungen oder Sicherheitsgründen - ich bin mir nicht sicher).

In jedem Fall sehe ich keinen guten Grund dafür und das ist meine persönliche Meinung. Wenn es schwer zu implementieren ist, dann ist es ein Designfehler. Und ich denke, das Sicherheitsargument kann leicht zerkratzt werden, da das Hinzufügen von Schritten zum Prozess für einen Benutzer, der bereits authentifiziert und autorisiert wurde, nicht als bessere Sicherheit gilt.

Wieder, nur meine Meinung.

In jedem Fall bin ich wirklich dankbar für die ganze Zeit und Mühe in PostgreSQL-Projekt gesteckt. Danke Leute.

+3

Sie können keine Berechtigungen für eine andere Datenbank erteilen. Sie müssen sich zuerst mit dieser Datenbank verbinden. –

+0

@a_horse_with_no_name Ist das nicht absurd !? – Mehran

+0

Warum sollte das absurd sein? So funktioniert Postgres. –

Antwort

1

Erstens, ich weiß nicht, ob das Absicht oder der Mangel an Implementierung ist, aber das ist ein langjähriges Verhalten in PostgreSQL. Es gibt keine datenbankübergreifenden Verweise. Es gibt eine Reihe von Gründen, warum es gegenwärtig wahrscheinlich nie geben wird, insbesondere die Schwierigkeit, Dinge wie das richtige Verhalten der Systemkataloge zu machen. Grundsätzlich hat die Datenbank A keine Kenntnis der Strukturen in der Datenbank B.

Zweitens ist die datenbankübergreifende Informationsfreigabe in PostgreSQL ebenfalls etwas inkonsistent. pg_locks (aus irgendeinem seltsamen Grund) zeigt alle über alle Datenbanken. Ich denke also, dass dies wahrscheinlich eine organische Entwicklung ist, anstatt dass sich die Leute hinsetzen und eine Politik dazu entwickeln. Genauso wie Sie wahrscheinlich wissen, sind Rollen und Benutzer cluster-global. Ich kann also verstehen, warum das ein wenig widersprüchlich erscheint.

Der richtige Weg, dies in PostgreSQL zu tun, ist eine Verbindung zu der Datenbank, in der Sie Berechtigungen verwalten möchten. Es gibt keine andere Möglichkeit für PostgreSQL, Zugriff auf die entsprechenden Katalogeinträge zu erhalten und sie zu ändern und die Änderungen wahrscheinlich so zu brechen, dass es mir so unwahrscheinlich erscheint.