[firebase-br] Procedures Firebird + PHP

Gladiston Santana gladiston em vidy.com.br
Qua Fev 10 14:55:44 -03 2016


Exemplos você pode tirar do próprio manual do PHP, a página web que
documenta todas as suas funções tem exemplos melhores do que eu poderia
fornecer.
Algo que o manual online não diz é as boas práticas, muito uteis para não
quebrar a cabeça.

A respeito de usar procedure selecionável ou não, até tem como executá-la
como se fosse DSQL (execute procedure), mas na prática não existe como
executar uma procedure que não seja por select * from procedures(...) em
php e imagino o mesmo em outras linguagens para web.
Ocorre que numa conexão desse tipo é sempre bom receber um retorno de uma
procedure (falha, sucesso ou algum conteúdo) para saber se deve seguir
adiante ou repetir o formulario de internet, programadores em PHP tem que
saber lidar com variáveis de sessão e ter algum retorno da procedure ajuda
a contextualizar e evitar duplicar a execução de um procedimento porque o
operador fez refresh de tela, por exemplo. Por isso não é prático usar
procedures, sem que as mesmas não retornem nada.

Em se tratando de boas práticas, eu separo as procedures com prefixo GET e
SET, assim algo como GET_VAL_DUPLICATAS é sugerível que se trata de uma
procedure selecionável que retornará colunas de dados, enquanto o
SET_QUALQUER_COISA irá fazer alterações e me retornam algo que ajuda a
discernir se a SP foi executada, ignorada, etc... alguns trocam procedures
selecionáveis por VIEWS, cada um faz do seu jeito

Como boa prática também, é bom evitar chamadas de select from tabela de
dentro dum codigo PHP, pois daria ao atacante um conhecimento da base que
poderia estar noutro servidor em que ele ainda não conseguiu a invasão, mas
que com o conhecimento/permissões obtidos possa arbitrariamente conectar a
este servidor FB e efetuar delete/update a belprazer.

Também os GRANTs (permissões) devem ser da tabela para a procedure, isto é,
a procedure tem acesso, mas qualquer querie direta dum usuário seria
repelido, ex:
grant all on DUPLICATAS to procedure GET_VAL_DUPLICATAS;
grant execute GET_VAL_DUPLICATAS to user/role FULANO;

com isso, um select * from duplicatas por parte de um fulano qualquer não
funcionaria (e muito menos um update ou delete), enquanto select * from
get_val_duplicatas seria executado com sucesso ainda que o conteúdo da SP
não pudesse ser visualizado ou alterado.

Usar permissões por role e conectar-se informando usuario+senha+role torna
seu programa mais seguro e flexivel, a função [p]connect permite se
conectar usando role e até mesmo trocar a role durante o uso.

Um abraço e sucesso.


Em 10 de fevereiro de 2016 11:57, motorolars . <motorolars em gmail.com>
escreveu:

> Bom dia pessoal.
>
> Meu nome é Marcelo, sou do RS e estou com algumas dúvidas sobre PHP +
> procedures no Firebird.
> Escrevi uma procedure, testei no Ibexpert e funciona perfeitamente.
> Então, ficou uma dúvida referente sobre como trabalhar com procedures via
> PHP. Pelo que andei pesquisando, existem dois casos:
> -Procedimentos executáveis (através de Execute Procedure)
> -Procedimentos selecionáveis (através de Select).
>
> Gostaria de saber se alguém poderia me passar um exemplo da cada via PHP.



Mais detalhes sobre a lista de discussão lista