it-swarm.com.de

Berechtigung für Beziehung <Tabelle> verweigert

Ich habe die folgende SQL in psql ausgeführt:

CREATE USER bspu LOGIN;

CREATE DATABASE bsp OWNER bspu;

GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;

\c bsp

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  client_id VARCHAR(20) NOT NULL,
  api_key VARCHAR(100) NOT NULL,
  api_secret VARCHAR(100) NOT NULL,
  auth_token VARCHAR(128) NOT NULL
);

Wenn ich mich als bspu anmelde und versuche, die Tabelle users abzufragen, wird folgende Fehlermeldung angezeigt:

permission denied for relation users

Ich habe versucht zu laufen:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;

Aber es hilft nicht. Was mache ich falsch? Warum hat der Datenbankbesitzer KEINE Berechtigung zum Abfragen seiner eigenen Datenbank?

BEARBEITEN: Ich habe bspu vorerst auf Superuser aktualisiert, damit ich weiterarbeiten kann. Jede weitere Anleitung wird geschätzt.

12

DEFAULT PRIVILEGES do not Berechtigungen für vorhandene Objekte ändern. Sie sind die Standardberechtigungen für neu erstellte Objekte und nur für die bestimmte Rolle, zu der sie gehören. Wenn Sie die Rolle beim Ausführen von ALTER DEFAULT PRIVILEGES Nicht definieren, wird standardmäßig die Rolle current verwendet (wenn die Anweisung ALTER DEFAULT PRIVILEGES Ausgeführt wird.

Da Sie eine serial -Spalte verwenden, die eine SEQUENCE erstellt, möchten Sie außerdem Standardberechtigungen für Sequenzen als festlegen Gut.

Führen Sie dies auf dem Benutzer aus, mit dem Sie Objekte erstellen. vor Führen Sie den Befehl CREATE aus:

ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON TABLES TO bspu;
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON SEQUENCES TO bspu;

Wenn Sie pgAdmin verwenden sollten, ist Vorsicht geboten. In der aktuellen Version 1.20 (oder älter) ist ein Fehler in der Anzeige des rückentwickelten SQL-Skripts für DEFAULT PRIVILEGES Angezeigt. Die Anzeige ignoriert den besitzenden Benutzer und ist daher in bestimmten Situationen falsch. Ich habe den Fehler gemeldet, die Angelegenheit steht noch aus .

Für vorhandene Objekte könnte Sie auch diese "Stapel" -Form des Befehls GRANT interessieren:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bspu;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bspu;

Mehr unter dieser verwandten Frage zu SO:

22