Roles

Jaime Casanova

Soporte Libre 17 de diciembre de 2009

Jaime Casanova

Roles

Conceptos básicos

Los usuarios son roles Los grupos son roles

Jaime Casanova

Roles

Conceptos básicos

Los usuarios son roles Los grupos son roles Los roles pueden ser miembros de otros roles Otras categorizaciones son artificiales y confusas
por ej. lo de “usuarios” y “grupos”

Jaime Casanova

Roles

Opciones de los Roles

Superuser puede ignorar todas las otras restricciones CreateDB puede crear nuevas bases de datos CreateRole puede crear otros roles Inherit se heredan automáticamente estos privilegios? login tiene capacidad de conectarse? connlimit Cantidad máxima de conexiones simultáneas password ... valid until fecha/hora de expiración

Jaime Casanova

Roles

Administración de Roles

Los roles se crean con CREATE ROLE Se pueden cambiar atributos con ALTER ROLE Se pueden eliminar con DROP ROLE
No se pueden eliminar si tienen referencias en alguna parte (excepto membresía en otros roles, que se elimina automáticamente) REASSIGN OWNED y DROP OWNED pueden ayudar con estas referencias

Jaime Casanova

Roles

Administración de Roles (2)

Se pueden otorgar roles a otros roles con GRANT GRANT mi_grupo TO mi_usuario; mi_usuario tiene ahora automáticamente todos los derechos de ambos Si mi_grupo es usado como grupo en pg_hba.conf, mi_usuario ahora será considerado en las coincidencias

Jaime Casanova

Roles

Herencia de roles

Los roles pueden heredarse automáticamente o no Si está definido NOINHERIT, un rol debe usar SET ROLE para obtener los privilegios de otro INHERIT por omisión
equivalente al sistema anterior que usaba grupos

La herencia es un grafo Se pueden definir muros de contención de privilegios

Jaime Casanova

Roles

Herencia de roles

Los roles pueden heredarse automáticamente o no Si está definido NOINHERIT, un rol debe usar SET ROLE para obtener los privilegios de otro INHERIT por omisión
equivalente al sistema anterior que usaba grupos

La herencia es un grafo Se pueden definir muros de contención de privilegios Por ejemplo:
El rol A tiene inherit y se le otorgan B y C El rol B tiene noinherit y se le otorga D El rol A tiene automáticamente los privilegios de A, B y C El rol A puede hacer SET ROLE a D

Jaime Casanova

Roles

Herencia de roles (2)

Los grafos de roles pueden tener múltiples niveles
GRANT A to B GRANT B to C GRANT C to D D tiene los derechos de D, C, B y A C tiene los derechos de C, B y A

No se permiten ciclos GRANT D to A; ERROR: el rol «D» es un miembro del rol «A»

Jaime Casanova

Roles

Buenas Prácticas: en Administración de Roles

Minimizar escalado de privilegios Requerir que los administradores deban explícitamente pedir privilegios elevados Permitir que administradores estén en grupos normales Crear un rol noinherit para administración (ej. admin) GRANT postgres TO admin GRANT admin TO los administradores Esto exige que los administradores deban hacer SET ROLE admin para obtener privilegios elevados Minimiza la necesidad de conectarse con el usuario postgres

Jaime Casanova

Roles

Buenas Prácticas: en Aplicaciones
Requerir que los privilegios de la base de datos sean exigidos
(incluso para usuarios web)

Al menos tres opciones: 1. Usuarios de aplicaciones que usan Kerberos
Las credenciales (tokens) se pasan a través de las aplicaciones Puede ser incluso basado en web en Apache, usando mod_auth_kerb

2. Usuarios que usan Username/Password
Las credenciales se pasan desde el código de la aplicación Se usa ese username/password para conectarse a la BD

3. La aplicación maneja la autentificación
El código de aplicación usa un usuario común Este usuario común no tiene privilegios ... ... excepto poder hacer SET ROLE a los usuarios El código de la aplicación usa SET ROLE para cambiarse al usuario correcto
Jaime Casanova Roles

Funciones security definer

Existen ciertos objetos en Postgres que pueden cambiar el rol Las funciones que se ejecutan security definer se ejecutan con el usuario dueño de la función
Tenga cuidado con funciones del usuario postgres Ponga atención al search_path y otras variables definibles por el usuario en funciones security definer

Las vistas se ejecutan como el dueño de la vista

Jaime Casanova

Roles

Múltiples dueños

Algunas órdenes requieren que el usuario sea dueño del objeto:
TRUNCATE (hasta antes de 8.4) VACUUM ANALYZE ALTER

Usando roles, se pueden tener múltiples dueños! Ejemplo:
el rol mi_grupo es dueño de mi_tabla los roles A, B y C tienen mi_grupo los tres roles tienen privilegios de dueño sobre mi_tabla

Jaime Casanova

Roles

En los catálogos

Los roles se almacenan en pg_authid Membresía se almacena en pg_auth_members Hasta antes de 8.5, se utilizaban archivos planos generados a partir de los catálogos

Jaime Casanova

Roles

Examinando los roles

\du en psql
muestra los roles los atributos no estándares las membresías

la vista pg_roles también muestra los roles

Jaime Casanova

Roles

psql

Lista de roles Nombre de rol admin alvherre contabilidad jaime pedro postgres produccion yudisney Atributos Sin herencia, No puede conectarse No puede conectarse Miembro de {postgres} {contabilidad,produccion} {} {admin,produccion} {contabilidad} {} {} {admin,produccion}

Superusuario, Crear rol, Crear BD No puede conectarse

Jaime Casanova

Roles

Preguntas

¿Preguntas?

Jaime Casanova

Roles