Els rols permeten controlar l'accés a les diferents bases de dades.
Introducció
Cada rol té assignats uns privilegis co ara login que permet al rol iniciar sessió, createdb que permet al rol crear una nova base de dades o superuser que permet al rol tenir tots els privilegis.
A més un rol pot ser membre d’altres rols.
Entorn de treball
Entra dins una màquina Windows Subsystem for Linux (WSL).
Crea un contenidor postgres:
docker run -d --name postgres -e POSTGRES_PASSWORD=password postgres:18docker exec -it postgresObre un terminal interactiu:
docker exec -it rol psql -U postgresCrear un rol
Per crear un nou rol en un servidor PostgreSQL, utilitza la instrucció create role:
Per exemple, la següent instrucció utilitza la instrucció create role per crear un nou rol anomenat tortuga:
create role tortuga;Quan crees un rol, aquest és vàlid en totes les bases de dades dins del servidor de bases de dades (o clúster).
Pots consultar tots els rols de la base de dades en el catàleg del sistema pg_roles:
select rolname from pg_roles; rolname----------------------------- pg_database_owner ... pg_signal_autovacuum_worker postgres tortuga(18 rows)Observa que:
- Els rols els noms dels quals comencen amb
pg_són rols del sistema. postgresés un rol de superusuari creat per defecte.
També utilitzar l’ordre \du per mostrar tots els rols que has creat (també inclou el rol postgres):
\du List of roles Role name | Attributes-----------+------------------------------------------------------------ postgres | Superuser, Create role, Create DB, Replication, Bypass RLS tortuga | Cannot loginLa sortida indica que el rol tortuga no pot iniciar sessió.
Per permetre que tortuga iniciï sessió al servidor has d’afegir-li l’atribut login.
Atributs de rol
Els atributs d’un rol defineixen els privilegis per a aquest rol, incloent l’inici de sessió, l’estat de superusuari, la creació de bases de dades, la creació de rols, la gestió de contrasenyes, etc.
Aquesta és la sintaxi per crear un nou rol amb atributs:
create role name with option;En aquesta sintaxi, la paraula clau with és opcional.
L’opció pot ser un o més atributs com superuser, createdb, createrole, etc.
Crear rols d’inici de sessió
Per exemple, la següent instrucció crea un rol anomenat nobita que té el privilegi d’inici de sessió i una contrasenya inicial:
create role nobita login password '1234';Observa que col·loques la contrasenya entre cometes simples (').
Aquí tens la nova llista de rols:
\du List of roles Role name | Attributes-----------+------------------------------------------------------------ nobita | postgres | Superuser, Create role, Create DB, Replication, Bypass RLS tortuga | Cannot loginSurt de la base de dades:
\qAra pots utilitzar el rol nobita per iniciar sessió al servidor de bases de dades PostgreSQL utilitzant l’eina client psql:
docker exec -it rol psql -U nobita -d postgresEt demanarà una contrasenya … 😐 (en aquest context no).
Has d’introduir la contrasenya que vas introduir a la instrucció create role per iniciar sessió al servidor.
Una connexió “psql” sempre es fa a una base de dades i, per defecte, es fa a la base de dades que coincideix amb el nom del rol que utilitzes per connectar-te.
Com que no existeix cap base de dades nobita has de conectar-te de manera explícita a la base de dades postgres.
Si no ho fas, passa això:
docker exec -it rol psql -U nobitapsql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "nobita" does not existPots verificar que és el rol nobita qui està connectat:
select current_user; current_user-------------- nobita(1 row)Crear rols de superusuari
La següent instrucció crea un rol anomenat doraemon que té l’atribut de superuser:
create role doraemon superuser login password '1234';Però com que ara ets l’usuari nobita, no pots crear altres usuaris.
Només un rol de superusuari pot crear un altre rol de superusuari:
ERROR: permission denied to create roleDETAIL: Only roles with the CREATEROLE attribute may create roles.Canvia al rol postgres:
set role postgres;Tampoc 😺 … És una base de dades segura!
ERROR: permission denied to set role "postgres"Tanca la sessió i torna a entrar amb el rol postgres:
docker exec -it rol psql -U postgresCrea el superusuari doraemon:
create role doraemon superuser login password '1234';Canvia a l’usuari doraemon:
set role doraemon;El rol de superusuari té tots els permisos dins del servidor.
Per tant, només has de crear el rol de superusuari quan sigui necessari.
Crear rols amb permís de creació de bases de dades
Si vols crear rols que tinguin el privilegi de creació de bases de dades, pots utilitzar l’atribut createdb:
create role shizuka createdb login password '1234';Canvia al rol shizuka i crea la base de dades planet:
set role shizuka;create database universe;Crear rols amb un període de validesa
Per establir una data i hora després de la qual la contrasenya del rol ja no sigui vàlida, utilitza l’atribut valid until:
valid until 'timestamp'Un segon després del marcat per timestamp la contrasenya ja no serà válida.
Per exemple, la següent instrucció crea un rol dev_api amb contrasenya vàlida fins a …:
create role takeshi with login password '1234' valid until '2025-11-20';ERROR: permission denied to create roleDETAIL: Only roles with the CREATEROLE attribute may create roles.El rol shizuka només té permís per crear bases de dades, no rols.
Torna al rol de postgres i crea el rol shizuka.
set role postgres;create role shizuka with login password '1234' valid until '2025-11-20';Crear rols amb límit de connexió
Per especificar el nombre de connexions simultànies que pot fer un rol, utilitza l’atribut connection limit.
La següent instrucció crea un nou rol anomenat api que pot fer 1000 connexions simultànies:
create role api login password '1234' connection limit 1000;Conclusió
Ara tens diversos rols en la teva base de dades amb permisos diferents:
\du List of roles Role name | Attributes-----------+------------------------------------------------------------ api | 1000 connections doraemon | Superuser nobita | postgres | Superuser, Create role, Create DB, Replication, Bypass RLS shizuka | Create DB takeshi | Password valid until 2025-11-20 00:00:00+00 tortuga | Cannot login