As respostas às suas perguntas vêm dos documentos on-line do PostgreSQL 8.4 .
-
GRANT ALL PRIVILEGES ON DATABASEconcede os privilégiosCREATE,CONNECTeTEMPORARYem um banco de dados a uma função (os usuários são adequadamente chamados de papéis ). Nenhum desses privilégios permite uma função para ler dados de uma tabela; O privilégioSELECTna tabela é necessário para isso. -
Não sei se existe uma maneira "adequada" de conceder todos os privilégios em todas as tabelas a uma função. A melhor maneira de garantir que uma determinada função tenha todos os privilégios em uma tabela é garantir que a função possua a tabela. Por padrão, cada objeto recém-criado é de propriedade da função que o criou, portanto, se você quiser que uma função tenha todos os privilégios em uma tabela, use essa função para criá-la.
O PostgreSQL 9.0 introduz a seguinte sintaxe que é quase o que você quer:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO new_user;O problema é que, se você criar tabelas em esquemas fora do esquema "público" padrão, esse
GRANTnão se aplicará a eles. Se você usar esquemas não públicos, terá deGRANTos privilégios para esses esquemas separadamente.