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 anmelde bspu
und versuche, die users
Tabelle 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 bspu
habe vorerst ein Upgrade auf Superuser durchgeführt, damit ich weiterarbeiten kann. Jede weitere Anleitung wird geschätzt.
postgresql
permissions
wenn __name__ None ist
quelle
quelle
\dt "users"
?SELECT session_user, current_user
oben in Ihrem Skript? Und was ist deine Postgres-Version?Antworten:
DEFAULT PRIVILEGES
Ändern Sie nicht die Berechtigungen für vorhandene Objekte. 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 nicht definierenALTER DEFAULT PRIVILEGES
, wird standardmäßig die aktuelle Rolle verwendet (beim Ausführen derALTER DEFAULT PRIVILEGES
Anweisung.Da Sie eine
serial
Spalte verwenden, die eine erstelltSEQUENCE
, möchten Sie auch Standardberechtigungen für Sequenzen festlegen.Führen Sie dies auf dem Benutzer aus, mit dem Sie Objekte erstellen, bevor Sie den
CREATE
Befehl ausführen :Wenn Sie pgAdmin verwenden sollten, ist Vorsicht geboten. In der aktuellen Version 1.20 (oder älter) ist ein Fehler in der Anzeige des Reverse Engineered SQL-Skripts für aufgetreten
DEFAULT PRIVILEGES
. 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
GRANT
Befehls interessieren :Mehr unter dieser verwandten Frage zu SO:
quelle
quelle