2016-03-26 6 views
4

Ich habe eine separate Rolle "newrole" und neues Schema "newschema" für einen bestimmten Benutzer erstellt, der nur einige gespeicherte Funktionen ausführen sollte. Ich habe es geschafft, den Zugriff auf das Schema "public" für die aktuelle Datenbank zu widerrufen.Zugriff auf Postgres-Datenbank für eine Rolle widerrufen

Angemeldet als „newrole“ Ich habe immer noch Zugriff auf Postgres-Datenbank wie folgt aus:

SELECT * FROM pg_user 

Ich möchte alle Zugriff auf die Postgres-Datenbank zu widerrufen und versucht folgt, nicht:

REVOKE ALL ON DATABASE postgres FROM newrole 

Wenn ich als neue Rolle eingeloggt bin kann ich immer noch die Postgres Datenbank lesen.

Wie kann ich den Zugriff auf die Postgres Admin-Datenbank widerrufen?

Ich habe eine lange Zeit gesucht, aber nichts über den Zugriff auf die Postgres Admin-Datenbank gefunden.

TIA,

+0

Welchen Benutzer möchten Sie entfernen? Alle Nutzer? –

+0

Nur die "neueRolle". Normale Benutzer greifen nicht direkt auf die Datenbank zu und benötigen manchmal aus anderen Gründen Zugriff auf die Postgres-Datenbank. – sibert

+0

Ich glaube, das connect-Privileg muss angegeben werden, versuchen REVOKE connect ON DATABASE [Datenbankname] FROM public – Lucas

Antwort

2

sollten Sie in der Lage sein, dies zu laufen:

select * FROM information_schema.table_privileges where grantee = 'newrole'; 

alle Vorzüge für newrole anzuzeigen. Mit diesen Informationen sollten Sie in der Lage sein, alles andere als den Zugriff auf 'newschema' explizit zu widerrufen.

+0

@sibert Ich habe meine Antwort entfernt, weil ich nicht weiß, was ich tue ... Sorry Wenn Sie meinen Befehl ausgeführt und es verursacht Probleme. Viel Glück mit Ihrem Projekt –

+0

Aus irgendeinem Grund gibt es in den table_privileges keine Informationen über "newrole". Also suche ich noch ... – sibert

3

Dieses Problem hat nichts mit der Datenbank postgres zu tun. Stattdessen möchten Sie den Katalog der aktuellen Datenbank bearbeiten. Jede Datenbank verfügt über einen Katalog mit Informationen zu allen Objekten im Schema pg_catalog und in standardkonformer Form im Schema information_schema. Daher sollten Sie den Zugriff auf die betreffende Rolle und auch auf die Rolle public beschränken, da jede Rolle ebenfalls Mitglied dieser Rolle ist Rolle:

REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM newrole; 
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public; 
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM newrole; 
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM public; 

jedoch das System nicht immer diese Ehre accross-the-Board Einschränkung sind die Kataloge es für einen Grund und wichtige Funktionen in der Datenbank zur Verfügung stellen. Insbesondere können Funktionen noch ausgeführt werden.

Im Allgemeinen möchten Sie nicht mit den Katalogen herumspielen, es sei denn Sie wirklich wissen, was Sie tun.

+0

Danke für deine Erklärung. Aber die "newrole" kann immer noch auf pg_users usw. zugreifen. Gibt es keine Möglichkeit, vertrauliche Informationen zu verbergen (z. B. Multi-Tenant-Umgebung)? – sibert

Verwandte Themen