2.7. Privilégios

Quem cria o objeto no banco de dados se torna seu dono. Por padrão, apenas o dono do objeto pode realizar alguma operação com o objeto. Para permitir outros usuários utilizarem o objeto, devem ser concedidos privilégios (existem usuários que possuem o privilégio de superusuário, os quais sempre podem acessar qualquer objeto).

Nota: Para mudar o dono de uma tabela, índice, seqüência ou visão deve ser utilizado o comando ALTER TABLE.

Existem muitos privilégios diferentes: SELECT, INSERT, UPDATE, DELETE, RULE, REFERENCES, TRIGGER, CREATE, TEMPORARY, EXECUTE, USAGE e ALL PRIVILEGES. Para obter informações completas relativas aos diferentes tipos de privilégio suportados pelo PostgreSQL deve ser consultada a página de referência do comando GRANT. As próximas seções e capítulos também mostram a utilização dos privilégios.

O direito de modificar e destruir objetos são exclusivos do seu criador.

Para conceder privilégios é utilizado o comando GRANT. Portanto, se joel é um usuário existente, e contas é uma tabela existente, o privilégio de poder atualizar esta tabela pode ser concedido por meio do comando:

GRANT UPDATE ON contas TO joel;

Para executar este comando o usuário deve ser o dono da tabela. Para conceder privilégios para um grupo deve ser utilizado o comando:

GRANT SELECT ON contas TO GROUP faturamento;

O nome especial de "usuário" chamado PUBLIC pode ser utilizado para conceder privilégios para todos os usuários do sistema. Escrevendo-se ALL no lugar do nome específico do privilégio causa a concessão de todos os privilégios.

Para revogar um privilégio deve ser utilizado o comando REVOKE:

REVOKE ALL ON contas FROM PUBLIC;

Os privilégios especiais do dono da tabela (ou seja, os direitos de DROP, GRANT, REVOKE, etc.) são inerentes à situação de ser o dono, não podendo ser concedidos ou revogados. Porém, o dono da tabela pode decidir revogar seus próprios privilégios como, por exemplo, permitir apenas leitura na tabela para o próprio e para os outros.