it-swarm.com.de

Erlaubnis für Relation verweigert

Ich habe versucht, einen einfachen SQL-Befehl auszuführen:

select * from site_adzone;

und ich habe diesen Fehler bekommen

ERROR:  permission denied for relation site_adzone

Woran könnte das liegen?

Ich habe auch versucht, für andere Tische auszuwählen und habe das gleiche Problem. Ich habe auch versucht, dies zu tun:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

aber ich habe diese Antwort von der Konsole bekommen

WARNING:  no privileges were granted for "jerry"

Haben Sie eine Idee, was falsch sein kann?

287
Boban

GRANT in der Datenbank ist nicht das, was Sie brauchen. Grant direkt auf den Tischen.

Das Erteilen von Berechtigungen für die Datenbank wird hauptsächlich zum Erteilen oder Widerrufen von Verbindungsberechtigungen verwendet. Auf diese Weise können Sie angeben, wer in der Datenbank arbeiten darf, wenn er über ausreichende andere Berechtigungen verfügt.

Sie möchten stattdessen:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

Dies wird dieses Problem beheben.

332
Chris Travers

Das Posten von Ron E beantworte die Erteilung von Berechtigungen für alle Tabellen, da dies für andere nützlich sein könnte.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
212
sag

Stellen Sie zuerst eine Verbindung zur richtigen Datenbank her, und führen Sie dann Folgendes aus:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
62
user2757813
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;
27
Klanjabrik

Gehen Sie wie folgt vor, um allen vorhandenen Tabellen im Schema Berechtigungen zu erteilen:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

So geben Sie Standardberechtigungen an, die auf zukünftige Tabellen angewendet werden:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

z.B.

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

Wenn Sie die Spalten SERIAL oder BIGSERIAL verwenden, möchten Sie wahrscheinlich dasselbe für SEQUENCES tun, andernfalls schlägt Ihr INSERT fehl ( Postgres 10's IDENTITY hat dieses Problem nicht und wird gegenüber den SERIAL -Typen) empfohlen, d. H.

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

Siehe auch meine Antwort auf PostgreSQL Permissions for Web App für weitere Details und ein wiederverwendbares Skript.

Ref:

GRANT

ALTER DEFAULT PRIVILEGES

17
isapir

1. und wichtig Schritt ist die Verbindung zu Ihrer Datenbank:

psql -d yourDBName

2 Schritt, gewähren Sie Privilegien

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
14
zond

Dies passiert häufig, wenn Sie eine Tabelle als Benutzer postgres erstellen und dann versuchen, als normaler Benutzer darauf zuzugreifen. In diesem Fall ist es am besten, sich erneut als postgres anzumelden und ALTER TABLE OWNER TO someuser zu verwenden, um den Tabelleneigentum an den Benutzer zu ändern, der die Tabelle verwenden wird.

5
Bruce

Stellen Sie sicher, dass Sie sich bei psql als Eigentümer der Tabellen anmelden. um herauszufinden, wem die Tische gehören, benutze \dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

dann kannst du die GRANTS ausführen

4
Brian McCall