442 Stimmen

Zugriff verweigert für Relation

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

select * from site_adzone;

und ich habe diesen Fehler bekommen

FEHLER: Berechtigung verweigert für Relation site_adzone

Was könnte das Problem hier sein?

Ich habe auch versucht, select für andere Tabellen durchzuführen und das gleiche Problem erhalten. Ich habe auch versucht, dies zu tun:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

aber ich habe diese Antwort von der Konsole erhalten

WARNUNG: Keine Berechtigungen wurden für "jerry" erteilt

Hat jemand eine Idee, was falsch sein könnte?

30voto

isapir Punkte 17220

Um Berechtigungen für alle vorhandenen Tabellen im Schema zu gewähren, verwenden Sie:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA  TO 

Um Standardberechtigungen festzulegen, die auf zukünftige Tabellen angewendet werden sollen, verwenden Sie:

ALTER DEFAULT PRIVILEGES IN SCHEMA  
  GRANT  ON TABLES TO ;

z.B.

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

Wenn Sie SERIAL oder BIGSERIAL Spalten verwenden, werden Sie wahrscheinlich das gleiche für SEQUENCES tun wollen, ansonsten wird Ihr INSERT fehlschlagen (Postgres 10's IDENTITY hat dieses Problem nicht und wird über die SERIAL Typen empfohlen), d.h.

ALTER DEFAULT PRIVILEGES IN SCHEMA  GRANT ALL ON SEQUENCES TO ;

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

Ref:

GRANT

ALTER DEFAULT PRIVILEGES

18voto

Bruce Punkte 373

Dies geschieht häufig, wenn Sie eine Tabelle als Benutzer postgres erstellen und dann als gewöhnlicher Benutzer darauf zugreifen möchten. In diesem Fall ist es am besten, sich als Benutzer postgres anzumelden und mit dem Befehl den Besitz der Tabelle zu ändern:

alter table  owner to ;

8voto

Brian McCall Punkte 1663

Stellen Sie sicher, dass Sie sich als Besitzer der Tabellen bei psql anmelden. Um herauszufinden, wer die Tabellen besitzt, verwenden Sie \dt

psql -h VERBINDUNGSZEICHENFOLGE DBNAME -U BESITZER_DER_TABELLEN

dann können Sie die GRANTS ausführen

7voto

happydmitry Punkte 111

Du solltest:

  1. Verbinde dich mit der Datenbank über DBeaver und benutze 'postgres' als Benutzer
  2. Öffne auf dem linken Reiter deine Datenbank
  3. Öffne den Tab/Dropdown 'Rollen'
  4. Wähle deinen Benutzer aus
  5. Drücke auf dem rechten Reiter auf 'Berechtigungen'
  6. Öffne deinen Schema Reiter
  7. Drücke auf den Tab/Dropdown 'Tabellen'
  8. Wähle alle Tabellen aus
  9. Wähle alle erforderlichen Berechtigungs-Checkboxen aus (oder drücke auf 'Alle gewähren')
  10. Drücke auf 'Speichern'

2voto

Für PostgreSQL. Auf dem Bash-Terminal führen Sie folgendes aus:

psql db_name -c "GRANT ALL ON ALL TABLES IN SCHEMA public to db_user;"
psql db_name -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to db_user;"
psql db_name -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to db_user;"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X