web-dev-qa-db-fra.com

ne peut pas accorder de privilèges utilisateur à la base de données postgresql (pour une application Rails)

J'ai passé au peigne fin: http://www.postgresql.org/docs/current/interactive/app-psql.html#APP-PSQL-META-COMMANDSf et https: // www .digitalocean.com/community/articles/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps - 2 mais n'a toujours pas pu faire fonctionner cela.

J'ai fait cela pour que les postgres fonctionnent localement: https://askubuntu.com/questions/42013/problem-installing-and-configuring-postgresql .

pavan@myUbuntuLaptop% which psql
/usr/bin/psql

cela m'a fait entrer:

pavan@myUbuntuLaptop% Sudo su - postgres
[Sudo] password for pavan: 
postgres@myUbuntuLaptop% 

Donc...

postgres@myUbuntuLaptop% createuser pavankat
Shall the new role be a superuser? (y/n) y
postgres@myUbuntuLaptop% 

cela obtient tous les rôles

\du

qui montre pavankat, donc le rôle a été fait

Cela marche:

postgres=# CREATE database lateraldev;
CREATE DATABASE
postgres=# \l

Maintenant, j'essaie d'accorder des privilèges à lateraldev à l'utilisateur, pavankat:

cela ne fonctionne pas:

GRANT RULE ON lateraldev to pavankat

ne fonctionne pas:

GRANT ALL ON lateraldev TO pavankat;

ne fonctionne pas:

postgres=# GRANT ALL ON lateraldev TO pavankat;
ERROR:  relation "lateraldev" does not exist

cela semblait avoir fonctionné mais,\du n'a rien montré:

postgres=# GRANT ALL ON DATABASE lateraldev TO pavankat;
GRANT

même avec cela, ne le fait pas:

postgres=# GRANT ALL ON ALL TABLES IN SCHEMA public TO pavankat;
GRANT
postgres=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO pavankat;
GRANT
postgres=# GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO pavankat;
GRANT
postgres=# \du

J'ai utilisé ce post: http://imaginaryrobots.wordpress.com/2010/03/10/grant-all-in-postgres/ et copié le script Shell dans le Rails app.

puis a couru (pour rendre le fichier exécutable):

pavan@myUbuntuLaptop% chmod 755 give_permissions_script.sh

et ça ne marche pas:

postgres@myUbuntuLaptop$ ./give_permissions_script.sh
GRANT ALL ON DATABASE lateraldev TO pavankat;
could not change directory to "/home/pavan/Dropbox/venturelateral"
could not change directory to "/home/pavan/Dropbox/venturelateral"

essayé ceci: http://smokeandumami.com/2009/11/11/grant-permissions-on-all-tables-and-sequences-in-postgresql/ et il semble avoir fait quelque chose , mais ne fonctionne pas:

pavan@myUbuntuLaptop% chmod 755 give_permissions_script2.sh
pavan@myUbuntuLaptop% ./give_permissions_script2.sh
GRANT SELECT,UPDATE,DELETE,INSERT ON TABLE public.relname to pavankat;

voir:

postgres=# grant all privileges on database lateraldev to pavan;
GRANT
postgres=# \du

Cela ne fonctionne pas non plus: connectez-vous d'abord à la base de données:

postgres=# psql lateraldev

lateraldev=# GRANT ALL ON DATABASE lateraldev TO pavankat;
GRANT
lateraldev=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 pavan     | Superuser, Create role, Create DB, Replication | {}
 pavankat  | Superuser, Create role, Create DB, Replication | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

Je suis à court d'idées. Aidez-moi s'il vous plaît?

Joyeux Noël et bonnes fêtes!

19
Pavan Katepalli

as-tu essayé:

--Change the database ownership
alter database lateraldev owner to pavan;

--and do the same for all tables
psql -tc "select 'alter table ' || tablename || ' owner to pavan;' from pg_tables where schemaname not in ('pg_catalog', 'information_schema');" lateraldev | psql -a lateraldev
21
Bruno

donc après quelques fouilles. Trouvé sur le site Web de Postgres. Essentiellement, tout ce qui n'est pas un nom de table nécessite que le type soit explicitement appelé lors de l'octroi de l'autorisation.

GRANT ALL PRIVILEGES ON DATABASE my_newly_created_db_name TO my_user_name;

http://www.postgresql.org/message-id/[email protected]

13
user1230795

Essayez de créer l'utilisateur avec l'autorisation CREATEDB, puis vous pouvez créer la base de données avec cet utilisateur. L'utilisateur aura désormais l'autorisation sur cette base de données.

CREATE USER myuser CREATEDB;

Je sais que ce n'est pas une solution parfaite, mais j'espère que cela fonctionnera pour vous

-Brian

11
OneChillDude