Olá pessoal! Tem uma situação onde determinados usuários deverão gravar dados usando determinada functions, enquanto outros deve usar outra function, mas estou tendo dificuldade no uso de security e execute.. vamos aos exemplos: CREATE TABLE tab_teste (inteiro int); ALTER TABLE tab_teste OWNER TO POSTGRES;
-- CENARIO 1 ----------------------------------------------CREATE FUNCTION func_teste_gravar_fulano (inteiro int) RETURNS VOID AS$$ DECLARE BEGIN INSERT INTO tab_teste VALUES (inteiro); END;$$LANGUAGE PLPGSQL SECURITY INVOKER; ALTER FUNCTION func_teste_gravar_fulano (inteiro int) OWNER TO POSTGRES; CREATE FUNCTION func_teste_gravar_cicrano (inteiro int) RETURNS VOID AS$$ DECLARE BEGIN INSERT INTO tab_teste VALUES (inteiro); END;$$LANGUAGE PLPGSQL SECURITY INVOKER; ALTER FUNCTION func_teste_gravar_cicrano (inteiro int) OWNER TO POSTGRES; -- SE O USUARIO fulano (nao super) EXECUTASELECT func_teste_gravar_fulano(1); ERROR: permission denied for relation tab_teste -- SE O USUARIO fulano (nao super) EXECUTASELECT func_teste_gravar_cicrano(1); ERROR: permission denied for relation tab_teste -- CENARIO 2 ----------------------------------------------------------GRANT EXECUTE ON FUNCTION func_teste_gravar_fulano (inteiro int) TO "fulano"; -- SE O USUARIO fulano (nao super) EXECUTASELECT func_teste_gravar_fulano(1); ERROR: permission denied for relation tab_teste -- CENARIO 3 -----------------------------------------------------------CREATE FUNCTION func_teste_gravar_cicrano (inteiro int) RETURNS VOID AS$$ DECLARE BEGIN INSERT INTO tab_teste VALUES (inteiro); END;$$LANGUAGE PLPGSQL SECURITY DEFINER; ALTER FUNCTION func_teste_gravar_cicrano (inteiro int) OWNER TO POSTGRES; -- SE O USUARIO fulano (nao super) EXECUTASELECT func_teste_gravar_fulano(1);SUCESSO - mas não é pra ele conseguir pq ele deveria usar a outra --------------------------------------------------------------------Resumindo, eu não posso conceder permissão na tabela, e cada usuário pode usar apenas a "sua" function, tem jeito?Estou usando 9.1 PS: Claro que os objetos aqui representados são somente para teste, na realidade a complexidade dos objetos é muito maior. Agradeço,
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
