2017-10-16 6 views
1

Ich benutze PostGres 9.5. Ich habe Probleme beim Einfügen von Daten in eine Tabelle, die ich gerade erstellt habe. Ich erhalte "Erlaubnis verweigert" -Fehler, obwohl ich dem Datenbankbenutzer alle Privilegien gewährt habe. Siehe unten ...Alle Privilegien für meine PostGres-Tabelle erhalten, aber immer noch eine Fehlermeldung "Berechtigung verweigert" beim Einfügen/Auswählen

localhost:myapp davea$ psql -Upostgres 
Password for user postgres: 
psql (9.5.0, server 9.5.1) 
Type "help" for help. 

postgres=# GRANT ALL ON schema public TO myapp; 
GRANT 

localhost:myapp davea$ psql -Upostgres 
Password for user postgres: 
psql (9.5.0, server 9.5.1) 
Type "help" for help. 

postgres=# GRANT USAGE ON schema public TO myapp; 
GRANT 
postgres=# \q 
localhost:myapp davea$ myapp 
psql (9.5.0, server 9.5.1) 
Type "help" for help. 

myapp=> insert into search_codes (id, code, address_id) values (1, 'atlanta', 'GA'); 
ERROR: permission denied for relation search_codes 
myapp=> select * FROM search_codes; 
ERROR: permission denied for relation search_codes 
myapp=> \d search_codes; 
           Table "public.search_codes" 
    Column |  Type  |       Modifiers 
------------+-------------------+----------------------------------------------------------- 
id   | integer   | not null default nextval('search_codes_id_seq'::regclass) 
code  | character varying | 
address_id | character varying | 
Indexes: 
    "search_codes_pkey" PRIMARY KEY, btree (id) 
    "index_search_codes_on_code" UNIQUE, btree (code) 
    "index_search_codes_on_address_id" btree (address_id) 

Was ist der richtige Weg, Privilegien zu gewähren, so dass mein Benutzer eingeben und wählen Sie aus der Tabelle?

+0

Haben Sie eine separate Datenbank oder sind alle Ihre Tabellen in der Postgres-Standarddatenbank? –

Antwort

0

Ihr erster Befehl gibt Ihnen die Möglichkeit Tabelle aufzulisten (Sie können nur wissen, dass es bestehende)

GRANT USAGE ON SCHEMA public TO myapp 

Dann müssen Sie SELECT gewähren, INSERT, etc ... zu allen Tabellen in dem Schema public

GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA public TO myapp 

Ich empfehle, nicht alle Privilegien einer bestimmten App zu geben.

Wenn Sie Sequenzen haben:

GRANT SELECT, UPDATE, USAGE ON ALL SEQUENCES IN SCHEMA public to myapp 

Wenn Sie Funktionen haben:

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO myapp 

Dann wird Ihr Beispiel arbeiten.

Aber Sie haben noch einen Befehl anzuwenden, wenn Sie erstellten Tabelle futur wollen werden, um Zugriff auf: es

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLES TO myapp 

Postgresql haben eine sehr seltsame mecanism es dauerte eine Weile, um zu verstehen!

+0

Lief die ersten zwei Zuschüsse und es hat funktioniert. Danke – Dave

0

Sie erteilen Berechtigungen in der Postgres-Datenbank anstelle der myapp-Datenbank.

Ändern Sie den ersten PSQL Befehl

psql -Upostgres myapp 

und geben Sie dann die Zuschüsse

+0

Gab das einen Wirbel, aber ich bekomme immer noch die gleichen Fehler. – Dave

Verwandte Themen