Re: Respaldo de base de datos y usuarios únicos

From: "Fernando Moreno" <azazel(dot)7(at)gmail(dot)com>
To: "foro postgresql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Respaldo de base de datos y usuarios únicos
Date: 2008-08-09 03:21:55
Message-ID: b1c45530808082021q6ab77656vf53e82d90fd10d6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

---------- Mensaje reenviado ----------
De: Fernando Moreno <azazel(dot)7(at)gmail(dot)com>
Fecha: 8 de agosto de 2008 22:10
Asunto: Re: [pgsql-es-ayuda] Respaldo de base de datos y usuarios únicos
Para: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

El 4 de agosto de 2008 14:15, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>escribió:

> Fernando Moreno escribió:
>
> > Para poder mantener una especie de encapsulamiento entre los usuarios y
> la
> > única base de datos desde donde se podrá usar (sin interferir con las
> > demás), estaba pensando en una solución a base de prefijos alfanuméricos.
>
> Ugh. Creo que te conviene mirar aca:
> http://www.postgresql.org/docs/8.3/static/runtime-config-connection.html
>
> La última opción que aparece es "db_user_namespace". Hacerlo de esa
> forma debe ser mucho más sencillo que lo que propones.
>
> --
> Alvaro Herrera Valdivia, Chile Geotag: -39,815 -73,257
> Syntax error: function hell() needs an argument.
> Please choose what hell you want to involve.

Qué tal, antes que nada gracias por la respuesta. He hecho algunas pruebas y
con la opción que sugieres puedo evitar la aplicación de prefijos, pues
aunque aparentemente dos usuarios tengan el mismo nombre, la base de datos a
la que se conecten determinará su identidad real en el servidor.

Lo que sí me parece inevitable es un procesamiento de los respaldos, de
primera me imaginé un pg_dump normal, excluyendo privilegios (--no-acl), un
dump más únicamente con privilegios, y un pg_dumpall para respaldar sólo los
roles. El primer inconveniente es que pg_dump tiene parámetros para excluir
grant/revoke, pero no para dejarlos de manera similar a la opción
--data-only. Quizás sacando respaldos con y sin privilegios, y aplicando una
"resta" entre ellos, pero creo que complica de más las cosas.

Afortunadamente, todos los privilegios asignados a los usuarios se
corresponden con las tablas que controlan sus permisos dentro de la
aplicación (una especie de privilegios de alto nivel), así que es posible
partir con usuarios sin ningún privilegio concedido/retirado, y
reconstruirlos a partir de estas tablas.

Con esa aproximación los pasos para respaldar serían:
* pg_dump de la base de datos excluyendo privilegios.
* pg_dumpall de los roles, considerando únicamente los que pertenezcan a la
base respaldada, es decir, que tengan "@mibase" en su nombre.

Para restaurar:
* Crear la base de datos con el nombre deseado.
* En el dump de roles, agregar el nombre de la nueva base después de "@".
Ejecutar el script.
* Con una función ya existente en la base, procesar los permisos almacenados
en las tablas, para traducirlos a grant/revoke sobre todos los objetos
(tablas, vistas, esquemas, secuencias y funciones).

Bueno, de momento no parece mucho más sencillo que la opción anterior, pero
definitivamente es más seguro y libre de chapuzas aleatorias.

Saludos.

Pd. Sólo espero que no eliminen esta característica, o que su reemplazo sea
lo suficientemente parecido para no echar por tierra esta solución.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marco Castillo 2008-08-10 22:01:41 Autenticación de Postgresql
Previous Message Lennin Caro 2008-08-09 01:11:10 Re: Manejo de herencia en postgresql???