Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

flovato

INSERT ou UPDATE somente por Stored Procedure

Recommended Posts

Tenho uma tabela que quero impedir que SELECTs, INSERTs e UPDATEs sejam feitos diretamente.

 

Minha intenção é que o usuário "public" só possa acessar essa tabela através de stored procedures.

Para impedir o acesso à tabela é tranqüilo, basta usar REVOKE SELECT, INSERT, UPDATE ON TABLE ... No entanto, ao remover os privilégios de acesso do usuário "public", ao executar, por exemplo, a stored procedure que realiza um INSERT o postgres impedirá sua execução justamente porque o privilégio foi revogado.

No SELECT eu consigo resolver usando uma VIEW com dados "mascarados", mas o INSERT e o UPDATE está sendo um problema para mim. Pior ainda, para fazer um UPDATE o usuário deve ter privilégio para SELECT (além de UPDATE)!

 

Alguém tem uma dica para contornar esse problema?

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí galera, ninguém sabe como fazer com que operações INSERT e UPDATE sejam feitas apenas por stored procedure?

Não quero que o usuário "public" realize, por exemplo, UPDATE "teste" SET ... Em vez isso, haverá uma stored procedure para realizar tal operação.

 

Humm? E aí, alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui perguntar justamente para quem sabe menos do que eu! Que bando de zerados!

 

Para os ignorantes, assim como eu, que necessitam de uma solução para tal problema a resposta é: Use SECURITY DEFINER na definição da stored procedure.

 

[ EXTERNAL ] SECURITY DEFINER determina que a stored procedure deve ser executada com os privilégios do usuário que a criou (owner).

Dessa forma, no usuário "public" você remove os privilégios de SELECT, INSERT, UPDATE, ... e a stored procedure executará tais instruções normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.