In Postgres habe ich die folgende Tabelle in einer Datenbank namens erstellt testing
:
CREATE TABLE category_google_taxonomy (
category_id integer references category ON UPDATE CASCADE ON DELETE CASCADE,
google_taxonomy_id integer references google_taxonomy ON UPDATE CASCADE ON DELETE CASCADE
);
Wenn ich versuche, die Tabelle zu füllen:
INSERT INTO category_google_taxonomy (category_id, google_taxonomy_id) VALUES
(1,7),
(2,12);
Ich erhalte folgende Fehlermeldung:
ERROR: permission denied for schema public
LINE 1: SELECT 1 FROM ONLY "public"."category" x WHERE "category_id"...
^
QUERY: SELECT 1 FROM ONLY "public"."category" x WHERE "category_id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x
Ich habe ein bisschen nachgelesen und schließlich ALL PRIVILEGES
aus Verzweiflung gewährt , aber es funktioniert immer noch nicht:
testing=# GRANT ALL PRIVILEGES ON public.category TO testing;
GRANT
testing=# \dp category_google_taxonomy
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------------------------+-------+-------------------------+--------------------------
public | category_google_taxonomy | table | testing=arwdDxt/testing |
: super=arwdDxt/testing
testing=# \dp category
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+----------+-------+------------------------+--------------------------
public | category | table | testing=arwdDxt/super | category_id:
: testing=arwx/super
(1 row)
Auf @ Daniels Vorschlag habe ich versucht GRANT USAGE ON schema public TO super;
, jetzt, wenn ich den INSERT
Befehl ausführe, erhalte ich:
ERROR: permission denied for relation category
CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."category" x WHERE "category_id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x"
Hier ist der relevante Teil von \d
:
public | category | table | super
public | category_google_taxonomy | table | testing
GRANT ALL ON schema
, erhalte aber immer noch den gleichen Fehler wie zuvor.testing
ist der richtige Benutzer. Ich habe meinen ursprünglichen GRANT-Befehl hinzugefügt, er befand sich in der Tabelle und nicht in der gesamten Datenbank.