autorización de usar un schema

2018-09-13 Thread Fabiola Odái
Buenas tardes,


Hay alguna manera de indicar que un usuario x tiene autorización de usar un
schema de la base de datos para que al momento de ejecutar una consulta no
tenga que indicar schema.tablename que lo pueda ser directo
únicamente indicado tablename.

Ya probé con esto GRANT USAGE ON SCHEMA myschema TO myuser pero al
conectarse a la base y querer realizar una consulta pide se indique el
schema.

Observo que solamente el owner user puede hacer uso del schema sin tener
que indicar el nombre del schema.

Alguna sugerencia de como se puede hacer?

Gracias de antemano y saludos.
-- 
Atentamente
Fab OC


Re: autorización de usar un schema

2018-09-13 Thread Alvaro Herrera
Fabiola Odái escribió:

> Hay alguna manera de indicar que un usuario x tiene autorización de usar un
> schema de la base de datos para que al momento de ejecutar una consulta no
> tenga que indicar schema.tablename que lo pueda ser directo
> únicamente indicado tablename.

Esto no es una autorización, sino una indicación de dónde buscar.  Lo
que hay que hacer es cambiar el search_path del usuario.  Esto se puede
hacer en la sesión misma usando
  SET search_path TO ...lista-de-esquemas...
o bien de manera más global (para todas las sesiones) usando
  ALTER USER usuario SET search_path TO ...
(quizás "ALTER USER usuario IN DATABASE db" sea más apropiado).

Ojo que además de la visibilidad, la autorización (GRANT) también es
necesaria, aunque normalmente los esquemas son visibles al pseudo-rol
PUBLIC, es decir a todo el mundo.

> Observo que solamente el owner user puede hacer uso del schema sin tener
> que indicar el nombre del schema.

Eso es porque "$user" aparece en el search_path por defecto (es decir,
el usuario ve los objetos que están en un esquema que se llama como él
mismo).

-- 
Álvaro Herrerahttps://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: autorización de usar un schema

2018-09-13 Thread Fabiola Odái
Muchas gracias por la ayuda, realice lo siguiente:

SHOW search_path;  --Para conocer el valor de search_path
ALTER USER myuser IN DATABASE mydb SET search_path = 'myschema, public,
"$user"';

select * from mytable where campo = 'x'

Al ejecutar un select me muestra el siguiente mensaje:

ERROR:  no existe la relación «mytable»
LÍNEA 1: select * from mytable  where campo = 'x'

Me pide a indicar el schema
select * from *myschema.mytable* where campo = 'x'

Para indicar la tabla se pone el nombre del schema el problema es cuando se
requieren usar las funciones o algún otro objeto.


Gracias







El jue., 13 de sep. de 2018 a la(s) 13:52, Alvaro Herrera (
alvhe...@2ndquadrant.com) escribió:

> Fabiola Odái escribió:
>
> > Hay alguna manera de indicar que un usuario x tiene autorización de usar
> un
> > schema de la base de datos para que al momento de ejecutar una consulta
> no
> > tenga que indicar schema.tablename que lo pueda ser directo
> > únicamente indicado tablename.
>
> Esto no es una autorización, sino una indicación de dónde buscar.  Lo
> que hay que hacer es cambiar el search_path del usuario.  Esto se puede
> hacer en la sesión misma usando
>   SET search_path TO ...lista-de-esquemas...
> o bien de manera más global (para todas las sesiones) usando
>   ALTER USER usuario SET search_path TO ...
> (quizás "ALTER USER usuario IN DATABASE db" sea más apropiado).
>
> Ojo que además de la visibilidad, la autorización (GRANT) también es
> necesaria, aunque normalmente los esquemas son visibles al pseudo-rol
> PUBLIC, es decir a todo el mundo.
>
> > Observo que solamente el owner user puede hacer uso del schema sin tener
> > que indicar el nombre del schema.
>
> Eso es porque "$user" aparece en el search_path por defecto (es decir,
> el usuario ve los objetos que están en un esquema que se llama como él
> mismo).
>
> --
> Álvaro Herrerahttps://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>


-- 
Atentamente
Fab OC


Re: autorización de usar un schema

2018-09-13 Thread Alvaro Herrera
Fabiola Odái escribió:
> Muchas gracias por la ayuda, realice lo siguiente:
> 
> SHOW search_path;  --Para conocer el valor de search_path
> ALTER USER myuser IN DATABASE mydb SET search_path = 'myschema, public,
> "$user"';
> 
> select * from mytable where campo = 'x'
> 
> Al ejecutar un select me muestra el siguiente mensaje:
> 
> ERROR:  no existe la relación «mytable»
> LÍNEA 1: select * from mytable  where campo = 'x'

Para que el ALTER tome efecto, tienes que cerrar la sesión y volver a
abrirla.

-- 
Álvaro Herrerahttps://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: autorización de usar un schema

2018-09-13 Thread Fabiola Odái
Gracias nuevamente

Quedo así:
ALTER USER myuser IN DATABASE mydb SET search_path *TO* myschema, public,
"$user";

Excelente tarde!

El 13 de septiembre de 2018, 15:21, Alvaro Herrera
escribió:

> Fabiola Odái escribió:
> > Muchas gracias por la ayuda, realice lo siguiente:
> >
> > SHOW search_path;  --Para conocer el valor de search_path
> > ALTER USER myuser IN DATABASE mydb SET search_path = 'myschema, public,
> > "$user"';
> >
> > select * from mytable where campo = 'x'
> >
> > Al ejecutar un select me muestra el siguiente mensaje:
> >
> > ERROR:  no existe la relación «mytable»
> > LÍNEA 1: select * from mytable  where campo = 'x'
>
> Para que el ALTER tome efecto, tienes que cerrar la sesión y volver a
> abrirla.
>
> --
> Álvaro Herrerahttps://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>



-- 
Atentamente
Lic. Fab OC

*AVISO DE CONFIDENCIALIDAD:*
Este correo electrónico, incluyendo en su caso, los archivos adjuntos al
mismo, pueden contener información de carácter confidencial y/o
privilegiada, y se envían a la atención única y exclusivamente de la
persona y/o entidad a quien va dirigido. La copia, revisión, uso,
revelación y/o distribución de dicha información confidencial sin la
autorización por escrito de Fabiola Olvera está prohibida. Si usted no es
el destinatario a quien se dirige el presente correo, favor de contactar al
remitente respondiendo al presente correo y eliminar el correo original
incluyendo sus archivos, así como cualesquiera copia del mismo. Mediante la
recepción del presente correo usted reconoce y acepta que en caso de
incumplimiento de su parte y/o de sus representantes a los términos antes
mencionados Fabiola Olvera tendrá derecho a los daños y perjuicios que esto
le cause.

*CONFIDENTIALITY NOTICE:*
This e-mail message including attachments, if any, is intended only for the
person or entity to which it is addressed and may contain confidential and
/or privileged material. Any review, use, disclosure or distribution of
such confidential information without the written authorization of Fabiola
Olvera is prohibited. If you are not the intended recipient, please contact
the sender by reply e-mail and destroy all copies of the original message.
By receiving this e-mail you acknowledge that any breach by you and/or your
representatives of the above provisions may entitle Fabiola Olvera to seek
for damages.