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
Was könnte hier das Problem sein?
Ich habe auch versucht, für andere Tabellen auszuwählen und habe das gleiche Problem bekommen. Ich habe auch versucht, dies zu tun:
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
aber ich habe diese Antwort von der Konsole erhalten
WARNING: no privileges were granted for "jerry"
Haben Sie eine Idee, was falsch sein kann?
Antworten:
GRANT in der Datenbank ist nicht das, was Sie brauchen. Grant direkt auf den Tischen.
Das Gewähren 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 etwas ausführen darf, wenn er über ausreichende andere Berechtigungen verfügt.
Sie wollen stattdessen:
Dies wird dieses Problem beheben.
quelle
Veröffentlichen Sie die Antwort von Ron E, um Berechtigungen für alle Tabellen zu erteilen, da dies für andere nützlich sein kann.
quelle
ALL SEQUENCES
und ausführenALL FUNCTIONS
.ALL TABLES
Enthält auch Ansichten, daher gibt es keinen separatenALL VIEWS
Befehl :-)Stellen Sie zuerst eine Verbindung zur richtigen Datenbank her und führen Sie dann Folgendes aus:
quelle
\connect databasename;
quelle
Der erste und wichtigste Schritt ist die Verbindung zu Ihrer Datenbank:
2 Schritt, Berechtigungen gewähren
quelle
Verwenden Sie Folgendes, um Berechtigungen für alle vorhandenen Tabellen im Schema zu erteilen:
Verwenden Sie Folgendes, um Standardberechtigungen anzugeben, die auf zukünftige Tabellen angewendet werden:
z.B
Wenn Sie
SERIAL
oderBIGSERIAL
Spalten verwenden, möchten Sie wahrscheinlich dasselbe tunSEQUENCES
, sonst schlägt IhrINSERT
Fehler fehl ( Postgres 10IDENTITY
leidet nicht unter diesem Problem und wird gegenüber denSERIAL
Typen empfohlen ), d. H.Weitere Informationen und ein wiederverwendbares Skript finden Sie auch in meiner Antwort auf PostgreSQL-Berechtigungen für Web App .
Ref:
GEWÄHREN
ÄNDERN SIE STANDARDPRIVILEGIEN
quelle
Dies tritt häufig auf, wenn Sie eine Tabelle als Benutzer postgres erstellen und dann versuchen, als normaler Benutzer darauf zuzugreifen. In diesem Fall ist es am besten, sich als Postgres-Benutzer anzumelden und den Besitz der Tabelle mit dem folgenden Befehl zu ändern:
quelle
Stellen Sie sicher, dass Sie sich bei psql als Eigentümer der Tabellen anmelden. um herauszufinden, wem die Tabellen gehören
\dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
Dann können Sie die GRANTS ausführen
quelle
Wenn Sie nach ausgewählten Berechtigungen suchen, würde ich Ihnen empfehlen, nur ausgewählte und nicht alle Berechtigungen zu erteilen. Sie können dies tun durch:
quelle
Du solltest:
quelle
Ich war einmal mit diesem Problem konfrontiert. Ändern Sie einfach den Datenbankbenutzer in einen Superuser und Ihr Problem ist gelöst.
ALTER USER myuser MIT SUPERUSER;
quelle