Skip site navigation (1) Skip section navigation (2)

Re: permisos

From: René Romero Benavides <ichbinrene(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: permisos
Date: 2012-06-29 01:36:13
Message-ID: 4FED068D.7090905@gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
On 06/26/2012 02:39 PM, Felipe Montecino wrote:
>
> Prueba el script y luego me confirmas. Al menos en mi caso particular 
> no debo darle todos los permisos como tu. Asi que deberas cambiar 
> SELECT por lo que te sirva.
>
> El 26/06/2012 14:50, "Guillermo Villanueva" <guillermovil(at)gmail(dot)com 
> <mailto:guillermovil(at)gmail(dot)com>> escribió:
>
>     Muchas gracias Felipe!
>
>
>
>     El día 25 de junio de 2012 16:23, Felipe Montecino <ksha(at)mitm(dot)cl
>     <mailto:ksha(at)mitm(dot)cl>> escribió:
>     > Como les mencione, hice un script para poder dar permisos a las
>     bases de
>     > datos si bien no es el mejor script del mundo pero como
>     mencionaban mas
>     > arriba me encontraba en la misma situacion.
>     >
>     > 1.- crear archivo pgpass para que el script no pregunte password
>     1 millon de
>     > veces (dependera de las tablas que hayan en la bd).
>     >
>     > cat > .pgpass << EOF
>     > localhost:5432:somebd:someuser:somepasswd
>     > EOF
>     >
>     > 1.1.- cambiar permisos de solo lectura y escritura para el usuario.
>     >
>     > chmod 600 .pgpass
>     >
>     > 2.- crear archivo bd.sql, este script listara las tablas,
>     secuencias, etc.
>     >
>     > cat > bd.sql << EOF
>     > \c somebd
>     > \d
>     > EOF
>     >
>     > 3.- script en bash que asigna permisos para que solamente pueda
>     hacer
>     > select's para mas informacion podrian visitar el siguiente enlace:
>     > http://www.postgresql.org/docs/9.0/static/sql-grant.html
>     >
>     > Por command line:
>     >
>     > for table in $(psql -Usomeuser <  bd.sql | grep -r public | awk
>     '{print
>     > $3}'); do psql -Usomeuser -dsomebd -c "grant select on
>     public.$table to
>     > USERWITHGRANT with grant option"; done
>     >
>     > Donde USERWITHGRANT sera el otro usuario no owner con permisos
>     de SELECT
>     > sobre las tablas de la bd.
>     >
>     > La salida del comando deberia ser algo como ...
>     >
>     > GRANT
>     > GRANT
>     > GRANT
>     > GRANT
>     > GRANT
>     > GRANT
>     > GRANT
>     > GRANT
>     >
>     > Dependera de los parametros que le pasemos al psql para poder
>     mas detalle.
>     >
>     > Saludos.
>     >
>     > El 25 de junio de 2012 13:22, Felipe Montecino <ksha(at)mitm(dot)cl
>     <mailto:ksha(at)mitm(dot)cl>> escribió:
>     >
>     >> Encontre la forma de hacerlo. En un rato mas les envio el
>     script :).
>     >>
>     >> El 23/06/2012 23:09, "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org
>     <mailto:alvherre(at)alvh(dot)no-ip(dot)org>> escribió:
>     >>
>     >>>
>     >>> Excerpts from Guillermo Villanueva's message of sáb jun 23
>     21:28:45 -0400
>     >>> 2012:
>     >>>
>     >>> > El 22 de junio de 2012 19:31, Alvaro Herrera
>     >>> > <alvherre(at)alvh(dot)no-ip(dot)org
>     <mailto:alvherre(at)alvh(dot)no-ip(dot)org>>escribió:
>     >>>
>     >>> > > Podrías, por ejemplo, tener roles "dueno_dbprod" y
>     >>> > > "dueno_dbpruebas", y que el rol que usas tú para
>     conectarte tenga
>     >>> > > acceso
>     >>> > > a ambos; en cambio a tu cumpa le das acceso solamente a
>     >>> > > dueno_dbpruebas.
>     >>> > >
>     >>> > la idea está buena, pero vuelvo a lo mismo: dueno_dbprod lo
>     pongo como
>     >>> > owner de dbprod pero para que pueda hacer de todo en la
>     dbpruebas
>     >>> > deberé
>     >>> > darle acceso uno por uno a cada uno de los objetos, como te
>     digo, es
>     >>> > una
>     >>> > buena idea pero perdón por insistir, no resuelve mi problema
>     principal:
>     >>> > dar
>     >>> > acceso completo a la base sin hacerlo owner.
>     >>>
>     >>> Entiendo tu punto, pero ¿qué diferencia hay entre el dueño de
>     la BD y
>     >>> otro usuario que puede hacer cualquier cosa?
>     >>>
>     >>> --
>     >>> Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org
>     <mailto:alvherre(at)alvh(dot)no-ip(dot)org>>
>     >>> -
>     >>> Enviado a la lista de correo pgsql-es-ayuda
>     >>> (pgsql-es-ayuda(at)postgresql(dot)org
>     <mailto:pgsql-es-ayuda(at)postgresql(dot)org>)
>     >>> Para cambiar tu suscripción:
>     >>> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>     >
>     >
>     >
>     >
>     > --
>     >
>     > --
>     > Correo no firmado o cifrado
>     >
>
Hola, yo quiero contribuir también con mis dos centavos en este 
respecto, por ejemplo:

--copiar y pegar la salida de este query

SELECT 'GRANT SELECT ON '|| type || ' ' ||name ||' TO myUsuario; ' FROM
(SELECT n.nspname as "schema",
   c.relname as "name",
   CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' 
THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "type",
   pg_catalog.pg_get_userbyid(c.relowner) as "owner"
FROM pg_catalog.pg_class c
      LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
       AND n.nspname <> 'pg_catalog'
       AND n.nspname <> 'information_schema'
       AND n.nspname !~ '^pg_toast'
   AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2) as listaObjetos
;

O si disponemos de una versión reciente de postgresql (9.x)

GRANT SELECT ON ALL TABLES IN schema public TO miUsuario;
GRANT SELECT ON ALL SEQUENCES IN schema public TO miUsuario;
GRANT SELECT ON ALL FUNCTIONS IN schema public TO miUsuario;

Saludos!
-- 
pglearn.blogspot.mx <http://pglearn.blogspot.mx/>
*Twitter* *iCodeiExist*

In response to

pgsql-es-ayuda by date

Next:From: Rodriguez FernandoDate: 2012-06-29 12:10:39
Subject: Forzar contraseñas
Previous:From: =?iso-8859-1?Q?Laz=E1ro_Rub=E9n_Garc=EDa_Mart=EDnez?=Date: 2012-06-28 16:01:34
Subject: RE: sentencias de una bd a otra

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group