Lists: | pgsql-es-ayuda |
---|
From: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-16 12:54:23 |
Message-ID: | 15aa6b3e0909160554i18b804fbyd420efda021e0df1@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Hola lista, tengo la sgte. duda, en un servidor viejito corriendo Pg
7.4 necesito crear un usuario pero que sólo pueda realizar consultas
sobra una base de datos, creé el usuario y ahora necesito asignarle
los privilegios select pero necesito saber si hay alguna manera de
hacerlo automáticamente sin necesidad de asignarlos tabla por tabla.
Se me ocurrió escribir una función, pero si alguno conoce otra manera
rápido agradecido ;)
Sergio Gabriel Rodríguez
http://www.3trex.com.ar
From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-16 13:16:21 |
Message-ID: | 20090916131621.GD13076@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Sergio Gabriel Rodriguez escribió:
> Hola lista, tengo la sgte. duda, en un servidor viejito corriendo Pg
> 7.4 necesito crear un usuario pero que sólo pueda realizar consultas
> sobra una base de datos, creé el usuario y ahora necesito asignarle
> los privilegios select pero necesito saber si hay alguna manera de
> hacerlo automáticamente sin necesidad de asignarlos tabla por tabla.
> Se me ocurrió escribir una función, pero si alguno conoce otra manera
> rápido agradecido ;)
Creo que te toca escribir la función.
--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
"Linux transformó mi computadora, de una `máquina para hacer cosas',
en un aparato realmente entretenido, sobre el cual cada día aprendo
algo nuevo" (Jaime Salinas)
From: | Edwin Quijada <listas_quijada(at)hotmail(dot)com> |
---|---|
To: | <sgrodriguez(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-16 13:48:10 |
Message-ID: | BLU137-W15354469FED941A646EB05E3E20@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
No hay. Solo que hagas un script en algun lenguaje y lo corras sino sera tabla por tabla.
*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-Soporte PostgreSQL
*-www.jqmicrosistemas.com
*-809-849-8087
*-------------------------------------------------------*
----------------------------------------
> Date: Wed, 16 Sep 2009 09:54:23 -0300
> Subject: [pgsql-es-ayuda] GRANT SELECT para todas las tablas de una base
> From: sgrodriguez(at)gmail(dot)com
> To: pgsql-es-ayuda(at)postgresql(dot)org
>
> Hola lista, tengo la sgte. duda, en un servidor viejito corriendo Pg
> 7.4 necesito crear un usuario pero que sólo pueda realizar consultas
> sobra una base de datos, creé el usuario y ahora necesito asignarle
> los privilegios select pero necesito saber si hay alguna manera de
> hacerlo automáticamente sin necesidad de asignarlos tabla por tabla.
> Se me ocurrió escribir una función, pero si alguno conoce otra manera
> rápido agradecido ;)
>
>
>
> Sergio Gabriel Rodríguez
> http://www.3trex.com.ar
> --
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
_________________________________________________________________
From: | Lennin Caro <lennin(dot)caro(at)yahoo(dot)com> |
---|---|
To: | sgrodriguez(at)gmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org, Edwin Quijada <listas_quijada(at)hotmail(dot)com> |
Subject: | RE: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-16 14:21:21 |
Message-ID: | 318298.18055.qm@web59515.mail.ac4.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
--- On Wed, 9/16/09, Edwin Quijada <listas_quijada(at)hotmail(dot)com> wrote:
From: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
Subject: RE: [pgsql-es-ayuda] GRANT SELECT para todas las tablas de una base
To: sgrodriguez(at)gmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Date: Wednesday, September 16, 2009, 1:48 PM
No hay. Solo que hagas un script en algun lenguaje y lo corras sino sera tabla por tabla.
*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-Soporte PostgreSQL
*-www.jqmicrosistemas.com
*-809-849-8087
*-------------------------------------------------------*
----------------------------------------
> Date: Wed, 16 Sep 2009 09:54:23 -0300
> Subject: [pgsql-es-ayuda] GRANT SELECT para todas las tablas de una base
> From: sgrodriguez(at)gmail(dot)com
> To: pgsql-es-ayuda(at)postgresql(dot)org
>
> Hola lista, tengo la sgte. duda, en un servidor viejito corriendo Pg
> 7.4 necesito crear un usuario pero que sólo pueda realizar consultas
> sobra una base de datos, creé el usuario y ahora necesito asignarle
> los privilegios select pero necesito saber si hay alguna manera de
> hacerlo automáticamente sin necesidad de asignarlos tabla por tabla.
> Se me ocurrió escribir una función, pero si alguno conoce otra manera
> rápido agradecido ;)
>
>
>
> Sergio Gabriel Rodríguez
> http://www.3trex.com.ar
> --
> TIP 2: puedes desuscribirte de todas las listas simultáneamente
> (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
_________________________________________________________________
--
TIP 8: explain analyze es tu amigo
por pgadmin puedes usar la opcion grant wizard y seleccionar todas las tablas y asignarle el privilegio y usuario deseado
Ing. Lennin Caro Pérez
Usuario:GNU/LINUX
PHP Developer
PostgreSQL DBA
Oracle DBA
Linux counter id 474393
From: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
---|---|
To: | Lennin Caro <lennin(dot)caro(at)yahoo(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org, Edwin Quijada <listas_quijada(at)hotmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-16 14:45:35 |
Message-ID: | 15aa6b3e0909160745hd4a08a9tc462dce562baff11@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Gracias a todos por las respuestas, Lennin me llegó medio tarde tu consejo,
pero lo voy a tener en cuenta para la próxima, dejo mi precaria función para
el que la necesite o el que quiera corregirla:
CREATE OR REPLACE FUNCTION "public"."dar_permisos" (esquema varchar, usuario
varchar, privilegio varchar) RETURNS boolean AS
$BODY$
DECLARE
registro record;
BEGIN
FOR registro IN SELECT * FROM pg_tables WHERE schemaname= esquema LOOP
EXECUTE 'GRANT ' || privilegio || ' ON ' || esquema || '.' ||
registro.tablename || ' TO ' || usuario;
END LOOP;
RETURN TRUE;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE
Sergio Gabriel Rodríguez
http://www.3trex.com.ar
From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
Cc: | Lennin Caro <lennin(dot)caro(at)yahoo(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org, Edwin Quijada <listas_quijada(at)hotmail(dot)com> |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-17 03:59:15 |
Message-ID: | 20090917035915.GH13076@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Sergio Gabriel Rodriguez escribió:
> Gracias a todos por las respuestas, Lennin me llegó medio tarde tu consejo,
> pero lo voy a tener en cuenta para la próxima, dejo mi precaria función para
> el que la necesite o el que quiera corregirla:
>
> CREATE OR REPLACE FUNCTION "public"."dar_permisos" (esquema varchar, usuario
> varchar, privilegio varchar) RETURNS boolean AS
> $BODY$
> DECLARE
> registro record;
> BEGIN
> FOR registro IN SELECT * FROM pg_tables WHERE schemaname= esquema LOOP
> EXECUTE 'GRANT ' || privilegio || ' ON ' || esquema || '.' ||
> registro.tablename || ' TO ' || usuario;
> END LOOP;
> RETURN TRUE;
> END;
> $body$
> LANGUAGE 'plpgsql' VOLATILE
Prueba esto:
create schema "mi esquema" create table "mi tabla" ();
select dar_permisos("mi esquema", current_user, 'all');
--
Alvaro Herrera http://www.flickr.com/photos/alvherre/
"No hay cielo posible sin hundir nuestras raíces
en la profundidad de la tierra" (Malucha Pinto)
From: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | Lennin Caro <lennin(dot)caro(at)yahoo(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org, Edwin Quijada <listas_quijada(at)hotmail(dot)com> |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-17 10:49:58 |
Message-ID: | 15aa6b3e0909170349p74c5231bj2c1b79f0a348dde3@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
>
>
> Prueba esto:
>
> create schema "mi esquema" create table "mi tabla" ();
> select dar_permisos("mi esquema", current_user, 'all');
>
>
Alvaro, cambié el type del parámetro usuario de varchar a name:
CREATE OR REPLACE FUNCTION "public"."dar_permisos" (esquema varchar, usuario
name, privilegio varchar)
....
no se si te referías a esto
Sergio Gabriel Rodríguez
http://www.3trex.com.ar
From: | juan <juanramirez(at)cajazacate(dot)com(dot)sv> |
---|---|
To: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-17 14:07:06 |
Message-ID: | 4AB2428A.20004@cajazacate.com.sv |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Sergio Gabriel Rodriguez escribió:
>> Prueba esto:
>> create schema "mi esquema" create table "mi tabla" ();
>> select dar_permisos("mi esquema", current_user, 'all');
>>
>>
> Alvaro, cambié el type del parámetro usuario de varchar a name:
> no se si te referías a esto
Para saber si se refería a eso, tendrías que haber echo la prueba tal
como el te sugirió.
--
Cordialmente,
Juan Ramírez Miranda
El Salvador
From: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
---|---|
To: | juan <juanramirez(at)cajazacate(dot)com(dot)sv> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-17 14:21:12 |
Message-ID: | 15aa6b3e0909170721l135a3a5fo1bf590fe7d2afd35@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
2009/9/17 juan <juanramirez(at)cajazacate(dot)com(dot)sv>
> Sergio Gabriel Rodriguez escribió:
>
>> Prueba esto:
>>> create schema "mi esquema" create table "mi tabla" ();
>>> select dar_permisos("mi esquema", current_user, 'all');
>>>
>>>
>>> Alvaro, cambié el type del parámetro usuario de varchar a name:
>> no se si te referías a esto
>>
>
> Para saber si se refería a eso, tendrías que haber echo la prueba tal como
> el te sugirió.
>
>
> --
> Cordialmente,
> Juan Ramírez Miranda
> El Salvador
>
Juan, ya había hecho la prueba, sólo que no copié el resultado de la misma,
perdón:
ERROR: no existe la función public.dar_permisos("unknown", name,
"unknown")
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
desear agregar conversión explÃcita de tipos
current_user devuelve un tipo de dato name
Sergio Gabriel Rodríguez
http://www.3trex.com.ar
From: | juan <juanramirez(at)cajazacate(dot)com(dot)sv> |
---|---|
To: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-17 15:11:57 |
Message-ID: | 4AB251BD.6060309@cajazacate.com.sv |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Sergio Gabriel Rodriguez escribió:
> Juan, ya había hecho la prueba, sólo que no copié el resultado de la misma,
> perdón:
>
> ERROR: no existe la función public.dar_permisos("unknown", name,
> "unknown")
> HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
> desear agregar conversión explÃcita de tipos
Luego de haber echo el cambio que dices, volviste a hacer la prueba que
sugiere Alvaro sin ningún problema?
>>>> create schema "mi esquema" create table "mi tabla" ();
>>>> select dar_permisos("mi esquema", current_user, 'all');
--
Cordialmente,
Juan Ramírez
El Salvador
From: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
---|---|
To: | juan <juanramirez(at)cajazacate(dot)com(dot)sv> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-17 15:44:39 |
Message-ID: | 15aa6b3e0909170844x6922c301w98ed0f6cb68bd6e0@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
>
> Luego de haber echo el cambio que dices, volviste a hacer la prueba que
> sugiere Alvaro sin ningún problema?
>
>
> >>>> create schema "mi esquema" create table "mi tabla" ();
> >>>> select dar_permisos("mi esquema", current_user, 'all');
>
Si, anduvo bien, mi pregunta apunta a si hay algún otro error que no estoy
viendo
Sergio Gabriel Rodríguez
http://www.3trex.com.ar
From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
Cc: | juan <juanramirez(at)cajazacate(dot)com(dot)sv>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-19 01:37:25 |
Message-ID: | 20090919013725.GJ13076@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
Sergio Gabriel Rodriguez escribió:
> >
> > Luego de haber echo el cambio que dices, volviste a hacer la prueba que
> > sugiere Alvaro sin ningún problema?
> >
> >
> > >>>> create schema "mi esquema" create table "mi tabla" ();
> > >>>> select dar_permisos("mi esquema", current_user, 'all');
>
> Si, anduvo bien, mi pregunta apunta a si hay algún otro error que no estoy
> viendo
¿Funciona realmente? Lo que quería hacerte notar es que debes usar
quote_ident:
CREATE OR REPLACE FUNCTION "public"."dar_permisos" (esquema varchar, usuario varchar, privilegio varchar) RETURNS boolean AS
$BODY$
DECLARE
registro record;
BEGIN
FOR registro IN SELECT * FROM pg_tables WHERE schemaname= esquema LOOP
EXECUTE 'GRANT ' || privilegio || ' ON ' || quote_ident(esquema) || '.' ||
quote_ident(registro.tablename) || ' TO ' || quote_ident(usuario);
END LOOP;
RETURN TRUE;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE ;
--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
"In a specialized industrial society, it would be a disaster
to have kids running around loose." (Paul Graham)
From: | Sergio Gabriel Rodriguez <sgrodriguez(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | juan <juanramirez(at)cajazacate(dot)com(dot)sv>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: GRANT SELECT para todas las tablas de una base |
Date: | 2009-09-19 02:08:31 |
Message-ID: | 15aa6b3e0909181908q7ab63224oa2faa65f72841add@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-es-ayuda |
On Fri, Sep 18, 2009 at 10:37 PM, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>wrote:
> Sergio Gabriel Rodriguez escribió:
> > >
> > > Luego de haber echo el cambio que dices, volviste a hacer la prueba que
> > > sugiere Alvaro sin ningún problema?
> > >
> > >
> > > >>>> create schema "mi esquema" create table "mi tabla" ();
> > > >>>> select dar_permisos("mi esquema", current_user, 'all');
> >
> > Si, anduvo bien, mi pregunta apunta a si hay algún otro error que no
> estoy
> > viendo
>
> ¿Funciona realmente? Lo que quería hacerte notar es que debes usar
> quote_ident:
>
> CREATE OR REPLACE FUNCTION "public"."dar_permisos" (esquema varchar,
> usuario varchar, privilegio varchar) RETURNS boolean AS
> $BODY$
> DECLARE
> registro record;
> BEGIN
> FOR registro IN SELECT * FROM pg_tables WHERE schemaname= esquema LOOP
> EXECUTE 'GRANT ' || privilegio || ' ON ' || quote_ident(esquema)
> || '.' ||
> quote_ident(registro.tablename) || ' TO ' || quote_ident(usuario);
> END LOOP;
> RETURN TRUE;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE ;
Gracias Alvaro, si funcionó, pero pensé que apuntabas al tipo de dato de
current_user y cambié el parámetro usuario de varchar a name, no noté lo de
quote_indent lo voy a probar
Sergio Gabriel Rodríguez
http://www.3trex.com.ar