GRANT

Name

GRANT -- define privilégios de acesso

Synopsis

GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] nome_do_objeto [, ...]
    TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]

Descrição

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:

SELECT

Permite consultar qualquer coluna (SELECT) da tabela, visão ou seqüência especificada. Também permite utilizar o comando COPY FROM.

INSERT

Permite incluir novas linhas (INSERT) na tabela especificada. Também permite utilizar o comando COPY TO.

UPDATE

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.

DELETE

Permite excluir linhas (DELETE) da tabela especificada.

RULE

Permite criar regras para a tabela ou para a visão (Consulte o comando CREATE RULE ).

REFERENCES

Para criar uma tabela com restrição de chave estrangeira é necessário possuir este privilégio na tabela com a chave referenciada.

TRIGGER

Permite criar gatilhos na tabela especificada (Consulte o comando CREATE TRIGGER).

ALL PRIVILEGES

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.

Notas

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             |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwdRxt","group todos=rw"}   |
   +------------------+---------------------------------------------+
   Legend:
         uname=arwR -- privileges granted to a user
   group gname=arwR -- privileges granted to a group
              =arwR -- privileges granted to PUBLIC

                  r -- SELECT ("read")
                  w -- UPDATE ("write")
                  a -- INSERT ("append")
                  d -- DELETE
                  R -- RULE
                  x -- REFERENCES
                  t -- TRIGGER
            arwdRxt -- ALL PRIVILEGES

O comando REVOKE é utilizado para revogar os privilégios de acesso.

Exemplos

Conceder, para todos os usuários, o privilégio de inserir na tabela filmes:

GRANT INSERT ON filmes TO PUBLIC;

Conceder todos os privilégios ao usuário manuel na visão tipos:

GRANT ALL PRIVILEGES ON tipos TO manuel;

Compatibilidade

SQL92

A palavra chave PRIVILEGES em ALL PRIVILEGES é requerida. O SQL não aceita a concessão de privilégios em mais de uma tabela no mesmo comando.

A sintaxe do SQL92 para o comando GRANT permite conceder privilégios individuais para as colunas da tabela, e permite conceder o privilégio de conceder o mesmo privilégio para outros:

GRANT privilégio [, ...]
    ON objeto [ ( coluna [, ...] ) ] [, ...]
    TO { PUBLIC | nome_do_usuário [, ...] } [ WITH GRANT OPTION ]

O SQL permite conceder o privilégio USAGE em outros tipos de objeto: CHARACTER SET, COLLATION, TRANSLATION, DOMAIN.

O privilégio TRIGGER foi introduzido no SQL99. O privilégio RULE é uma extensão do PostgreSQL.

Consulte também

REVOKE