[pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico Tiago Valério
Pessoal


Boa tarde, estou com a seguinte situação:

Preciso limitar a quantidade de registro acessados por um determinado
usuario fiz a seguinte function:


CREATE or replace FUNCTION seleciona_tabela( bigint)
returns tabela as

$seleciona_tabela$

select * from tabela
where id_tabela=$1
limit 1;

$seleciona_tabela$

language sql


Porem não  gostaria de dar o grant de select para o usuario em tabela,
pois somente assim a function funcionaria.

Neste caso teria como resolver esta questão sem o grant de select em
tabela?


Obs!!! Tentei fazer isto criando  uma view e limit 1 para tabela porem
quando uso o where ele nao retorna o registro.Agora se eu
não usar a view e for direto na tabela usando o where sem limit o registro é
retornado.Será que isto pode ser um problema relacionado ao limit?


Se alguem puder me ajudar eu agradeço.
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico Leonardo Cezar
2009/11/30 Tiago Valério tiagosvale...@gmail.com:
corte

 Porem não  gostaria de dar o grant de select para o usuario em tabela,
 pois somente assim a function funcionaria.

 Neste caso teria como resolver esta questão sem o grant de select em
 tabela?

CREATE FUNCTION seleciona_tabela(...)
RETURNS tabela
LANGUAGE PLPGSQL
AS $selection_tabela$

[]

END;
$selecion_tabela$
EXTERNAL SECURITY DEFINER;
^^^
Utilize a opção SECURITY na definição da procedure.

Por outro lado, uma visão resolveria seu problema de forma mais simples.

-Leo
-- 
Leonardo Cezar
http://www.aslid.org.br
http://postgreslogia.wordpress.com
http://www.dextra.com.br/postgres
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico Osvaldo Kussama
2009/11/30 Tiago Valério tiagosvale...@gmail.com:

 Boa tarde, estou com a seguinte situação:

 Preciso limitar a quantidade de registro acessados por um determinado
 usuario fiz a seguinte function:


 CREATE or replace FUNCTION seleciona_tabela( bigint)
 returns tabela as

 $seleciona_tabela$

     select * from tabela
     where id_tabela=$1
     limit 1;

 $seleciona_tabela$

 language sql


 Porem não  gostaria de dar o grant de select para o usuario em tabela,
 pois somente assim a function funcionaria.

 Neste caso teria como resolver esta questão sem o grant de select em
 tabela?


 Obs!!! Tentei fazer isto criando  uma view e limit 1 para tabela porem
 quando uso o where ele nao retorna o registro.Agora se eu
 não usar a view e for direto na tabela usando o where sem limit o registro é
 retornado.Será que isto pode ser um problema relacionado ao limit?



Creio que o que procura é SECURITY DEFINER.
http://www.postgresql.org/docs/current/interactive/sql-createfunction.html

Isto é, executar a função com os privilégios de quem criou a função e
não de quem está executando a função.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico Tiago Valério
 Leo

Obrigado pela ajuda e aproveitando, para colocar em pratica os conhecimentos
adquiridos.

Tentei com a criação da view e definindo limit 1.Porem quando uso o where
junto com a view  a consulta retorna zerada, e o registro está na
tabela.Pode haver restrição do limit neste caso?







2009/11/30 Leonardo Cezar lhce...@gmail.com

 2009/11/30 Tiago Valério tiagosvale...@gmail.com:
 corte

  Porem não  gostaria de dar o grant de select para o usuario em tabela,
  pois somente assim a function funcionaria.
 
  Neste caso teria como resolver esta questão sem o grant de select em
  tabela?

 CREATE FUNCTION seleciona_tabela(...)
 RETURNS tabela
 LANGUAGE PLPGSQL
 AS $selection_tabela$

 []

 END;
 $selecion_tabela$
 EXTERNAL SECURITY DEFINER;
 ^^^
 Utilize a opção SECURITY na definição da procedure.

 Por outro lado, uma visão resolveria seu problema de forma mais simples.

 -Leo
 --
 Leonardo Cezar
 http://www.aslid.org.br
 http://postgreslogia.wordpress.com
 http://www.dextra.com.br/postgres
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico JotaComm
Opa,

2009/11/30 Tiago Valério tiagosvale...@gmail.com

  Leo

 Obrigado pela ajuda e aproveitando, para colocar em pratica os
 conhecimentos adquiridos.

 Tentei com a criação da view e definindo limit 1.Porem quando uso o where
 junto com a view  a consulta retorna zerada, e o registro está na
 tabela.Pode haver restrição do limit neste caso?


 Você pode mandar a definição da view e um exemplo dos dados, podem ser
 ficticios.




 2009/11/30 Leonardo Cezar lhce...@gmail.com

 2009/11/30 Tiago Valério tiagosvale...@gmail.com:
 corte

  Porem não  gostaria de dar o grant de select para o usuario em tabela,
  pois somente assim a function funcionaria.
 
  Neste caso teria como resolver esta questão sem o grant de select em
  tabela?

 CREATE FUNCTION seleciona_tabela(...)
 RETURNS tabela
 LANGUAGE PLPGSQL
 AS $selection_tabela$

 []

 END;
 $selecion_tabela$
 EXTERNAL SECURITY DEFINER;
 ^^^
 Utilize a opção SECURITY na definição da procedure.

 Por outro lado, uma visão resolveria seu problema de forma mais simples.

 -Leo
 --
 Leonardo Cezar
 http://www.aslid.org.br
 http://postgreslogia.wordpress.com
 http://www.dextra.com.br/postgres
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



[]s
-- 
JotaComm
http://jotacomm.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico Tiago Valério
Fiz da seguinte forma

CREATE OR REPLACE VIEW vw_tabela as
select id,nmcliente,endereco,tel from esquema.tabela
order by id
limit 1;

Então fiz o seguinte consulta na view

select * from vw_tabela
where id=1234;

Na situacao acima o resultado gerado é zero.

Porem se faço  a consulta direto na tabela conforme abaixo, o registro é
retornado.


select * from esquema.tabela
where id=1234;

Será alguma restrição do limit isto?

Desde obrigado pela força.






2009/11/30 JotaComm jota.c...@gmail.com

 Opa,

 2009/11/30 Tiago Valério tiagosvale...@gmail.com

  Leo

 Obrigado pela ajuda e aproveitando, para colocar em pratica os
 conhecimentos adquiridos.

 Tentei com a criação da view e definindo limit 1.Porem quando uso o where
 junto com a view  a consulta retorna zerada, e o registro está na
 tabela.Pode haver restrição do limit neste caso?


 Você pode mandar a definição da view e um exemplo dos dados, podem ser
 ficticios.





 2009/11/30 Leonardo Cezar lhce...@gmail.com

 2009/11/30 Tiago Valério tiagosvale...@gmail.com:
 corte

  Porem não  gostaria de dar o grant de select para o usuario em
 tabela,
  pois somente assim a function funcionaria.
 
  Neste caso teria como resolver esta questão sem o grant de select em
  tabela?

 CREATE FUNCTION seleciona_tabela(...)
 RETURNS tabela
 LANGUAGE PLPGSQL
 AS $selection_tabela$

 []

 END;
 $selecion_tabela$
 EXTERNAL SECURITY DEFINER;
 ^^^
 Utilize a opção SECURITY na definição da procedure.

 Por outro lado, uma visão resolveria seu problema de forma mais simples.

 -Leo
 --
 Leonardo Cezar
 http://www.aslid.org.br
 http://postgreslogia.wordpress.com
 http://www.dextra.com.br/postgres
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 []s
 --
 JotaComm
 http://jotacomm.wordpress.com

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SELEÇÃO DE UM REGISTRO

2009-11-30 Por tôpico JotaComm
Olá,

2009/11/30 Tiago Valério tiagosvale...@gmail.com

 Fiz da seguinte forma

 CREATE OR REPLACE VIEW vw_tabela as
 select id,nmcliente,endereco,tel from esquema.tabela
 order by id
 limit 1;

 Então fiz o seguinte consulta na view

 select * from vw_tabela
 where id=1234;

 Na situacao acima o resultado gerado é zero.


Você não pode fazer o limit 1 na chamada da view?

Ao fazer dentro da view quando você faz limit 1 você vai trazer apenas o
primeiro registro, se você fizer teste com o primeiro registro da tabela
você verá que vai funcionar, se fizer com qualquer outro não.

Recomendaria você usar o limit na chamada da view.

PS: Não sei se minha explicação ficou clara.


 Porem se faço  a consulta direto na tabela conforme abaixo, o registro é
 retornado.


 select * from esquema.tabela
 where id=1234;

 Será alguma restrição do limit isto?

 Desde obrigado pela força.






 2009/11/30 JotaComm jota.c...@gmail.com

 Opa,

 2009/11/30 Tiago Valério tiagosvale...@gmail.com

  Leo

 Obrigado pela ajuda e aproveitando, para colocar em pratica os
 conhecimentos adquiridos.

 Tentei com a criação da view e definindo limit 1.Porem quando uso o where
 junto com a view  a consulta retorna zerada, e o registro está na
 tabela.Pode haver restrição do limit neste caso?


 Você pode mandar a definição da view e um exemplo dos dados, podem ser
 ficticios.





 2009/11/30 Leonardo Cezar lhce...@gmail.com

 2009/11/30 Tiago Valério tiagosvale...@gmail.com:
 corte

  Porem não  gostaria de dar o grant de select para o usuario em
 tabela,
  pois somente assim a function funcionaria.
 
  Neste caso teria como resolver esta questão sem o grant de select em
  tabela?

 CREATE FUNCTION seleciona_tabela(...)
 RETURNS tabela
 LANGUAGE PLPGSQL
 AS $selection_tabela$

 []

 END;
 $selecion_tabela$
 EXTERNAL SECURITY DEFINER;
 ^^^
 Utilize a opção SECURITY na definição da procedure.

 Por outro lado, uma visão resolveria seu problema de forma mais simples.

 -Leo
 --
 Leonardo Cezar
 http://www.aslid.org.br
 http://postgreslogia.wordpress.com
 http://www.dextra.com.br/postgres
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 []s
 --
 JotaComm
 http://jotacomm.wordpress.com

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



[]s
-- 
JotaComm
http://jotacomm.wordpress.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral