postgres: Berechtigung für Schema verweigert

10

Ich bin neu in postgresql und ich wäre Ihnen dankbar, wenn Sie mir mitteilen könnten, wie der folgende Fehler behoben werden kann.

Ich habe die folgenden Befehle ausgegeben:

ip_spotlight-# REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA doc FROM PUBLIC ;
ip_spotlight-# REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA net FROM PUBLIC ;

ip_spotlight# GRANT USAGE ON SCHEMA doc TO netopsapp ;

ip_spotlight-# ALTER DEFAULT PRIVILEGES IN SCHEMA doc GRANT ALL ON TABLES TO netopsapp ;
ip_spotlight-# ALTER DEFAULT PRIVILEGES IN SCHEMA net GRANT ALL ON TABLES TO netopsapp ;

Unten finden Sie eine Liste der Berechtigungen:

ip_spotlight# \dn+
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 doc    | postgres |                      | 
 net    | postgres |                      | 
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
(3 rows)

Und der Fehler ist:

python3 -m pwiz --engine=postgresql --host=x.x.x.x --port=5432 --user=netopsapp --password  --schema=doc --tables=bgp_communities ip_spotlight
Password: 
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/peewee.py", line 3768, in execute_sql
    cursor.execute(sql, params or ())
psycopg2.ProgrammingError: permission denied for schema doc
LINE 1: SELECT * FROM "doc"."bgp_communities" LIMIT 1

Könnten Sie bitte mitteilen, wie die Berechtigungen so eingerichtet werden, dass der netopsappBenutzer Zugriff auf die im Schema definierten Tabellen hat?doc

PS: Die ersten beiden Befehle wurden im Postgresql-Buch als Best Practice erwähnt

nskalis
quelle
Versuchen Sie, einen schreibgeschützten Benutzer zu erstellen?
Evan Carroll

Antworten:

15

das löst es:

postgres=# \connect ip_spotlight
You are now connected to database "ip_spotlight" as user "postgres".
ip_spotlight=# GRANT USAGE ON SCHEMA doc,net TO netops ;
ip_spotlight=# GRANT USAGE ON SCHEMA doc,net TO netopsapp ;

ip_spotlight=# GRANT SELECT ON ALL TABLES IN SCHEMA doc,net TO netops ;
ip_spotlight=# GRANT SELECT ON ALL SEQUENCES IN SCHEMA doc,net TO netops ;
ip_spotlight-# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA doc,net TO netops ;

ip_spotlight-# GRANT ALL ON ALL TABLES IN SCHEMA doc,net TO netopsapp ;
ip_spotlight-# GRANT ALL ON ALL SEQUENCES IN SCHEMA doc,net TO netopsapp ;
ip_spotlight-# GRANT ALL ON ALL FUNCTIONS IN SCHEMA doc,net TO netopsapp ;
nskalis
quelle
3
GRANT USAGE war der Schlüssel!
Fabio Bonfante
3

Sie führen das GRANT/ nicht aus, GRANT ALLwenn Sie mit der richtigen Datenbank verbunden sind. Vielleicht verwechseln Sie Entwicklung und Produktion?

Wenn Sie \dn+auf ip_spotlight ausführen, sehen Sie, dass Ihnen keine Berechtigungen für a erteilt wurden netopsapp. Das sollte sonst dort aufgeführt sein.

Evan Carroll
quelle
Danke, wissen Sie, wie man es behebt?
Nskalis
@NikosSkalis Verbindung zu derselben Datenbank herstellen python3 stellt eine Verbindung zu her und gibt die GRANTAnweisungen aus.
Evan Carroll
Vielen Dank. Wenn könnte eine Antwort posten, die auch erklärt, was der folgende Befehl tut: GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;das wäre großartig :)
nskalis
Dies gewährt dem Benutzer für jede Datenbank, mit der Sie verbunden sind, die angegebene Funktion und die Verwendung aller Operatoren, die über der Funktion für alle Funktionen im Schema implementiert sind. publicsome_user
Evan Carroll
aber was executebedeutet und was functionsbedeutet?
Nskalis