O comando GRANT concede permissões específicas no objeto (tabela, visão, seqüência) para um ou mais usuários ou grupos de usuário. Estas permissões são adicionadas às já concedidas, caso existam.
A palavra chave PUBLIC indica que o privilégio deve ser concedido para todos os usuários, inclusive aos que vierem a ser criado posteriormente. PUBLIC pode ser considerado como um grupo implicitamente definido que sempre inclui todos os usuários. Observe que qualquer usuário em particular possui a soma dos privilégios concedidos diretamente para o mesmo, mais os privilégios concedidos para qualquer grupo do qual seja membro, mais os privilégios concedidos para PUBLIC.
Os usuários, fora o criador do objeto, não possuem nenhum privilégio de acesso ao objeto a menos que o criador conceda as permissões. Não existe nenhuma necessidade de se conceder privilégios ao criador do objeto, porque o criador automaticamente possui todos os privilégios (O criador pode, entretanto, decidir revogar alguns de seus próprios privilégios por motivo de segurança. Observe que esta capacidade de conceder e revogar privilégios é inerente ao criador, não podendo ser perdida. O direito de eliminar o objeto é da mesma forma inerente ao criador, não podendo ser concedido ou revogado).
Os privilégios possíveis são:
Permite consultar qualquer coluna (SELECT) da tabela, visão ou seqüência especificada. Também permite utilizar o comando COPY FROM.
Permite incluir novas linhas (INSERT) na tabela especificada. Também permite utilizar o comando COPY TO.
Permite modificar os dados de qualquer coluna (UPDATE) da tabela especificada. O comando SELECT ... FOR UPDATE também requer este privilégio (além do privilégio SELECT ). Para as seqüências, este privilégio permite o uso de nextval, currval e setval.
Permite excluir linhas (DELETE) da tabela especificada.
Permite criar regras para a tabela ou para a visão (Consulte o comando CREATE RULE ).
Para criar uma tabela com restrição de chave estrangeira é necessário possuir este privilégio na tabela com a chave referenciada.
Permite criar gatilhos na tabela especificada (Consulte o comando CREATE TRIGGER).
Concede todos os privilégios mostrados acima de uma só vez. A palavra chave PRIVILEGES é opcional no PostgreSQL, entretanto é requerida pelo SQL estrito.
Os privilégios requeridos pelos outros comandos estão listados nas páginas de referência dos respectivos comandos.
Deve-se notar que os superusuários do banco de dados podem acessar todos os objetos a despeito dos privilégios definidos. Este comportamento é comparável aos direitos do usuário root no sistema Unix. Assim como o root, não é aconselhável operar como um superusuário, exceto quando for absolutamente necessário.
Atualmente para conceder privilégios somente para algumas colunas deve-se criar uma visão possuindo as colunas desejadas e conceder os privilégios para esta visão.
Use o comando \z do psql para obter informações sobre os privilégios concedidos nos objetos existentes:
Database = lusitania +------------------+---------------------------------------------+ | Relation | Grant/Revoke Permissions | +------------------+---------------------------------------------+ | m