web-dev-qa-db-fra.com

J'ai besoin d'aide pour configurer des rôles et des mots de passe dans PostgreSQL

J'utilise le postgres.app sur My Mini Server exécutant la version 9.4.0 en utilisant El Capitan. Je n'ai effectué aucune personnalisation dans pg-hba.conf. Je n'ai pas de fichier .pgPass. Je crois que .pgPass est utilisé pour stocker des mots de passe dans lesquels vous n'auriez pas à les saisir lors de l'accès à une instance de base de données. J'ai vraiment besoin d'une compréhension plus détaillée sur la terminologie UNIX utilisée dans pg-hba.conf.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
Host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
Host    all             all             ::1/128                 trust

Pour mon Ruby sur Rails Projets ayant des rôles avec des mots de passe avec différents types d'accès sera suffisant. D'après ce que je peux dire tout ce que je veux être considéré comme local.

J'ai soumis les deux questions ci-dessous dans le débordement de la pile l'année dernière et j'ai essayé de les mettre en œuvre mais en vain. J'ai fini par se bloquer de postgessql ou sans mot de passe fonctionne. À ce moment-là, j'utilisais l'instance PostgreSQL intégrée sur mon serveur Mac Mini.

https://stackoverflow.com/questions/22882280/postgresql-9-2-4-desire-a-changer-thoCalHost-Server-password-in-mavericks

https://stackoverflow.com/questions/25167284/Rails-4-desire-a-se-se-postgresql-password-access-database-in-Rails

Je veux ajouter un mot de passe crypté à mon rôle actuel. Je souhaite également ajouter deux autres rôles avec des mots de passe cryptés à utiliser dans mon Ruby ON Rails Applications hébergées sur mon Mac Mini Server, un avec accès en lecture seule et l'autre avec accès en lecture/écriture.

Je suppose que j'exécuterais les commandes suivantes dans le terminal PostgreSQL ou dans PGADMIN.

CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonlypasswordencryptedtext';
CREATE USER readwrite WITH ENCRYPTED PASSWORD 'readwritepasswordencryptedtext';
GRANT SELECT PRIVILEGES ON ALL TABLES IN public TO readonly, readwrite;
GRANT INSERT, UPDATE, DELETE PRIVILEGES ON TABLE table1, table2, table3, etc. TO readwrite;
ALTER ROLE myuserid WITH ENCRYPTED PASSWORD 'myuseridpasswordencryptedtext';

Je voudrais aider à changer de pg-hba.conf et dans quel ordre donc je ne ferme pas à Myuserid et s'il y a des choses supplémentaires à prendre en compte.

J'ai plusieurs bases de données avec des tables. Je ne pense pas que mes déclarations de subvention prennent cela en considération. Aurais-je besoin de créer un schéma pour inclure toutes mes bases de données pour l'utilisateur réadonn et les bases de données à mettre à jour pour l'utilisateur Readwrite?

rôle de base et gestion des utilisateurs

Par défaut, PostgreSQL stocke les mots de passe cryptés:

create user u_one with password 'password';

select * 
from pg_authid
where rolname = 'u_one';

-[ RECORD 1 ]--+------------------------------------
rolname        | u_one
rolsuper       | f
rolinherit     | t
rolcreaterole  | f
rolcreatedb    | f
rolcatupdate   | f
rolcanlogin    | t
rolreplication | f
rolconnlimit   | -1
rolpassword    | md54e83b97ec0bf59917d9d2689a961e390
rolvaliduntil  | 

pour certains tests:

create table tt (
    a serial primary key,
    v varchar
);

insert into tt (v)
values ('one'), ('two');

l'objectif est de créer un utilisateur qui a enregistré un accès en lecture seule et un utilisateur qui a tous les privilèges. Il est préférable de créer des rôles qui ont défini les privilèges, puis joignent des utilisateurs à chacun de ces rôles:

create role readonly;
create role readwrite;

grant select on all tables in schema public to readonly;
grant insert, update, delete on table tt to readwrite;

Dans mon exemple, j'aimerais que u_one ait un accès en lecture seule. Cet utilisateur ne: pas encore:

select * 
from tt;
ERROR:  permission denied for relation tt

Je vais joindre u_one à lire - seulement:

grant readonly to u_one;

Et maintenant u_one peut choisir dans la table TT.

Maintenant, je vais créer un u_two qui est READWRITE:

create user u_two with password 'password';
grant readwrite to u_two;

vous vouliez probablement autoriser des privilèges u_two Sélectionnez également:

grant readonly to u_two;

Lorsque vous essayez d'insérer dans TT en utilisant u_two:

insert into tt (v) values ('three');
ERROR:  permission denied for sequence tt_a_seq

Vous devez ajouter des privilèges Insert, Mettre à jour et/ou Supprimer les utilisateurs qui vont modifier cette séquence:

grant usage on tt_a_seq to readwrite;

Notez comment je n'ai ajouté que cela au rôle, et non l'utilisateur: U_TWO est maintenant capable d'insérer un nouvel enregistrement.

L'utilisation de ce rôle/stratégie utilisateur vous donnera une flexibilité considérable en réduisant les autorisations en double et vous permettant de créer et de configurer rapidement de nouveaux utilisateurs.

Le fichier de configuration HBA:

Par défaut, tous les utilisateurs pourront vous connecter à Localhost et, aussi longtemps que cela est vrai, vous n'aurez pas à apporter des modifications à pg_hba.conf. Vous devrez modifier si vous souhaitez qu'un utilisateur puisse accéder à la base de données à partir d'une autre adresse IP (ordinateur distant).

Si vous allez accorder un accès à distance:

DATABASE: Host --
USER: the username
ADDRESS: the ip address the user is connecting from 
(I doubt this will work with roles since roles do not have passwords,     
 though I've never tried either)
(if you want the user to be able to connect from any IP, then use
0.0.0.0/0)
METHOD: md5

Documents PostgreSQL sur la création de rôles et de syntaxe utilisateur. http://www.postgresql.org/docs/current/static/sql-grant.html

Accordant des privilèges à des séquences: https://stackoverflow.com/questions/9325017/Error-Permission-dentied-forance-cities-id-seq-utilisation-postgres

Documents PostgreSQL sur HBA: http://www.postgresql.org/docs/9.4/static/auth-pg-hba-conf.html

1
dizzystar