2017-10-16 27 views
1

J'utilise PostGres 9.5. J'ai du mal à insérer des données dans une table que je viens de créer. Je reçois des erreurs «autorisation refusée» malgré l'octroi de tous les privilèges à l'utilisateur de base de données. Voir ci-dessous ...J'ai obtenu tous les privilèges sur ma table PostGres, mais je reçois toujours une erreur "Autorisation refusée" lorsque j'essaie d'insérer/sélectionner

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) 

Quelle est la bonne façon d'accorder des privilèges pour que mon utilisateur peut insérer et sélectionnez la table?

+0

Avez-vous une base de données séparée ou toutes vos tables sont-elles dans la base de données par défaut de postgres? –

Répondre

0

Votre première commande vous donne la possibilité de lister la table (vous pouvez simplement savoir qu'il ya existantes)

GRANT USAGE ON SCHEMA public TO myapp 

Ensuite, vous devez GRANT SELECT, INSERT, etc ... à toutes les tables de la schéma public

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

Je recommande de ne pas donner tous les privilèges à une application spécifique.

Si vous avez des séquences:

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

Si vous avez des fonctions:

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO myapp 

Ensuite, votre exemple fonctionnera.

Mais vous avez encore à appliquer une commande si vous voulez table créée pour FUTUR pouvoir accéder:

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

Postgresql ont un très bizarre, il mécanisme m'a fallu un certain temps pour comprendre!

+0

Ran les deux premières subventions et cela a fonctionné. THX – Dave

0

Vous accordez des autorisations dans la base de données postgres au lieu de la base de données myapp.

Modifier la première commande PSQL à

psql -Upostgres myapp 

Et puis utilisez les subventions

+0

Donné un tourbillon mais j'ai toujours les mêmes erreurs. – Dave