GRANT

Nome

GRANT -- define privilégios de acesso

Sinopse

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

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE nome_do_banco_de_dados [, ...]
    TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON FUNCTION nome_da_função ([tipo, ...]) [, ...]
    TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE nome_da_linguagem [, ...]
    TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA nome_do_esquema [, ...]
    TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE nome_do_espaço_de_tabelas [, ...]
    TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...] [ WITH GRANT OPTION ]

Descrição

O comando GRANT concede privilégios específicos para um objeto (tabela, visão, seqüência, banco de dados, função, linguagem procedural, esquema ou espaço de tabelas) para um ou mais usuários ou grupos de usuários. Estes privilégios são adicionados aos já concedidos, se existirem. [1] [2] [3] [4]

A palavra chave PUBLIC indica que os privilégios devem ser concedido para todos os usuários, inclusive aos que vierem a ser criados posteriormente. PUBLIC pode ser considerado como um grupo definido implicitamente que sempre inclui todos os usuários. Um determinado usuário possui a soma dos privilégios concedidos diretamente para o mesmo, mais os privilégios concedidos para todos os grupos que este seja membro, mais os privilégios concedidos para PUBLIC.

Se for especificado WITH GRANT OPTION quem receber o privilégio poderá, por sua vez, conceder o privilégio a terceiros. Sem a opção de concessão, quem recebe não pode conceder o privilégio. Atualmente as opções de concessão somente podem ser concedidas a usuários individuais, e não a grupos ou PUBLIC.

Não é necessário conceder privilégios para o dono do objeto (geralmente o usuário que o criou), porque o dono possui todos os privilégios por padrão (Entretanto, o dono pode decidir revogar alguns de seus próprios privilégios por motivo de segurança). O direito de remover um objeto, ou de alterar a sua definição de alguma forma, não é descrito por um privilégio que possa ser concedido; é inerente ao dono e não pode ser concedido ou revogado. O dono possui também, implicitamente, todas as opções de concessão para o objeto.

Dependendo do tipo do objeto, os privilégios padrão iniciais podem incluir a concessão de alguns privilégios para PUBLIC. O padrão é: não permitir o acesso público às tabelas, esquemas e espaços de tabelas; para os bancos de dados conceder o privilégio CONNECT e o privilégio de criação de tabela TEMP; para as funções conceder o privilégio EXECUTE; e para as linguagens conceder o privilégio USAGE. O dono do objeto poderá, é claro, revogar estes privilégios (para a máxima segurança o comando REVOKE deverá ser executado na mesma transação que criar o objeto; dessa forma não haverá espaço de tempo para outro usuário utilizar o objeto).

Os privilégios possíveis são:

SELECT

Permite consultar (SELECT) qualquer coluna da tabela, visão ou seqüência especificada. Também permite utilizar o comando COPY TO. Para as seqüências, este privilégio também permite o uso da função currval.

INSERT

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

UPDATE

Permite modificar (UPDATE) os dados de qualquer coluna 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 das funções nextval e setval.

DELETE

Permite excluir (DELETE) linhas da tabela especificada.

RULE

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

REFERENCES

Para criar uma restrição de chave estrangeira é necessário possuir este privilégio, tanto na tabela que faz referência quanto na tabela que é referenciada.

TRIGGER

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

CREATE

Para bancos de dados, permite a criação de novos esquemas no banco de dados.

Para esquemas, permite a criação de novos objetos no esquema. Para mudar o nome de um objeto existente é necessário ser o dono do objeto e possuir este privilégio no esquema que o contém.

Para espaços de tabelas, permite a criação de tabelas e índices no espaço de tabelas, e permite a criação de bancos de dados possuindo este espaço de tabelas como seu espaço de tabelas padrão (Deve ser observado que revogar este privilégio não altera a colocação dos objetos existentes).

TEMPORARY
TEMP

Permite a criação de tabelas temporárias ao usar o banco de dados.

EXECUTE

Permite utilizar a função especificada e qualquer operador implementado utilizando a função. Este é o único tipo de privilégio aplicável às funções (Esta sintaxe funciona para as funções de agregação também).

USAGE

Para as linguagens procedurais, permite o uso da linguagem especificada para criar funções nesta linguagem. Este é o único tipo de privilégio aplicável às linguagens procedurais.

Para os esquemas, permite acessar os objetos contidos no esquema especificado (assumindo que os privilégios requeridos para os próprios objetos estejam atendidos). Essencialmente, concede a quem recebe o direito de "procurar" por objetos dentro do esquema.

ALL PRIVILEGES

Concede todos os privilégios disponíveis de uma só vez. A palavra chave PRIVILEGES é opcional no PostgreSQL, embora seja requerida pelo SQL estrito.

Os privilégios requeridos por outros comandos estão listados nas páginas de referência dos respectivos comandos.

Observações

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

Quando alguém que não é o dono do objeto tenta conceder privilégios para o objeto, o comando falha inteiramente caso o usuário não possua ao menos um privilégio para o objeto. Se o usuário possuir algum privilégio para o objeto o comando prosseguirá, mas só concederá os privilégios para os quais o usuário tem a opção de concessão. A forma GRANT ALL PRIVILEGES emite uma mensagem de advertência quando o usuário não possui ao menos uma opção de concessão, enquanto as outras formas emitem uma mensagem de advertência quando o usuário não possui opção de concessão para algum dos privilégios especificamente identificados no comando (Em princípio estas informações também se aplicam ao dono do objeto, mas como o dono é sempre tratado como possuindo todas as opções de concessão estes casos nunca ocorrem).

Deve ser observado que os superusuários do banco de dados podem acessar todos os objetos, independentemente dos privilégios definidos para o objeto. Isto é comparável aos direitos do usuário root no sistema operacional Unix. Assim como no caso do root, não é aconselhável operar como um superusuário a não ser quando for absolutamente necessário.

Se um superusuário decidir submeter o comando GRANT ou REVOKE, o comando será executado como se tivesse sido submetido pelo dono do objeto afetado. Em particular, os privilégio concedidos através deste comando aparecerão como se tivessem sido concedidos pelo dono do objeto.

Atualmente o PostgreSQL não suporta conceder ou revogar privilégios para as colunas da tabela individualmente. Uma forma possível de contornar esta limitação é criando uma visão contendo apenas as colunas desejadas e, então, conceder os privilégios para a visão.

Pode ser usado o comando \z do aplicativo psql para obter informações sobre os privilégios concedidos como, por exemplo:

=> \z minha_tabela

                       Privilégios de acesso ao banco dados "lusitania"
 Esquema |     Nome     |  Tipo  |                   Privilégios de acesso
---------+--------------+--------+------------------------------------------------------------
 public  | minha_tabela | tabela | {miriam=arwdRxt/miriam,=r/miriam,"group todos=arw/miriam"}
(1 linha)

As entradas mostradas pelo comando \z são interpretadas da seguinte forma:

              =xxxx -- privilégios concedidos para PUBLIC
         uname=xxxx -- privilégios concedidos para o usuário
   group gname=xxxx -- privilégios concedidos para o grupo

                  r -- SELECT ("read")
                  w -- UPDATE ("write")
                  a -- INSERT ("append")
                  d -- DELETE
                  R -- RULE
                  x -- REFERENCES
                  t -- TRIGGER
                  X -- EXECUTE
                  U -- USAGE
                  C -- CREATE
                  T -- TEMPORARY
            arwdRxt -- ALL PRIVILEGES (para tabelas)
                  * -- opção de concessão para o privilégio precedente

              /yyyy -- usuário que concedeu o privilégio

O exemplo mostrado acima seria visto pela usuária miriam após esta ter criado a tabela minha_tabela e executado:

GRANT SELECT ON minha_tabela TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON minha_tabela TO GROUP todos;

Se a coluna "Access privileges" estiver vazia para um determinado objeto, isto significa que o objeto possui os privilégios padrão (ou seja, sua coluna de privilégios é nula). Os privilégios padrão sempre incluem todos os privilégios para o dono, e podem incluir alguns privilégios para PUBLIC dependendo do tipo do objeto, como foi explicado acima. O primeiro comando GRANT ou REVOKE em um objeto cria uma instância dos privilégios padrão (produzindo, por exemplo, {=,miriam=arwdRxt}) e, em seguida, modifica-os de acordo com a solicitação especificada.

Deve ser observado que as opções de concessão implícitas do dono não são marcadas na visualização dos privilégios de acesso. O * aparece somente quando as opções de concessão foram concedidas explicitamente para alguém.

Exemplos

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

GRANT INSERT ON filmes TO PUBLIC;

Conceder ao usuário manuel todos os privilégios disponíveis na visão vis_tipos:

GRANT ALL PRIVILEGES ON vis_tipos TO manuel;

Deve ser observado que, embora o comando acima realmente concederá todos os privilégios se for executado por um superusuário ou pelo dono da visão vis_tipos, se for executado por outra pessoa somente concederá as permissões para as quais esta outra pessoa tiver a opção de conceder o privilégio a terceiros.

Compatibilidade

De acordo com o padrão SQL, a palavra chave PRIVILEGES em ALL PRIVILEGES é requerida. O padrão SQL não permite definir privilégios para mais de um objeto por comando.

O PostgreSQL permite ao dono do objeto revogar seus próprios privilégios ordinários: por exemplo, o dono da tabela pode tornar a tabela somente de leitura para ele mesmo revogando seus próprios privilégios de INSERT, UPDATE e DELETE. De acordo com o padrão SQL isto não é possível. A razão é que o PostgreSQL trata os privilégios do dono como tendo sido concedidos pelo dono para ele mesmo; portanto ele também pode revogá-los. No padrão SQL os privilégios do dono são concedidos pela entidade assumida "_SYSTEM". Em não sendo o "_SYSTEM", o dono não pode revogar estes direitos.

O padrão SQL permite definir privilégios para as colunas da tabela individualmente:

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

O padrão SQL estabelece o privilégio USAGE para outros tipos de objeto: conjuntos de caracteres, intercalações (collations [5] [6] [7] [8] ), traduções e domínios.

O privilégio RULE, e os privilégios para bancos de dados, espaços de tabelas, esquemas, linguagens e seqüências são extensões do PostgreSQL.

Consulte também

REVOKE

Notas

[1]

Oracle — O comando GRANT é utilizado para conceder: Privilégios de sistema para usuários e papéis; Papéis para usuários e papéis (Tanto os privilégios quanto os papéis são locais, globais ou externos); Privilégios de objeto para um objeto em particular para usuários, papéis e PUBLIC. Oracle® Database SQL Reference 10g Release 1 (10.1) Part Number B10759-01 (N. do T.)

[2]

Oracle — A autorização inclui basicamente dois processos: permitir somente certos usuários acessar, processar ou alterar dados; aplicar limitações variadas aos acessos ou ações dos usuários. As limitações colocadas (ou removidas) dos usuários podem ser aplicadas a objetos, como esquemas, tabelas ou linhas; ou a recursos como tempo (CPU, conexão ou ociosidade). O privilégio é o direito de executar um determinado tipo de instrução SQL ou de acessar o objeto de outro usuário. Alguns exemplos de privilégios incluem o direito de: conectar ao banco de dados (criar uma sessão); criar uma tabela; selecionar linhas da tabela de outro usuário; executar o procedimento armazenado de outro usuário. O privilégio de sistema é o direito de realizar uma determinada ação, ou de realizar uma ação em qualquer objeto de esquema de um determinado tipo. Por exemplo, os privilégios de criar espaços de tabelas e de excluir linhas de qualquer tabela em um banco de dados são privilégios de sistema. O privilégio de objeto de esquema é o privilégio, ou direito, de realizar uma determinada ação em um determinado objeto de esquema. Estão disponíveis privilégios de objeto diferentes para objetos de esquema diferentes. Oracle® Database Security Guide 10g Release 1 (10.1) Part Number B10773-01 (N. do T.)

[3]

DB2 — O privilégio transmite o direito para o usuário autorizado, através de seu ID de autorização, de realizar uma determinada ação em um determinado objeto. Permite ao ID de autorização criar, modificar ou acessar determinado recurso do banco de dados. O ID de autorização pode representar um usuário, um grupo ou todos os usuários (PUBLIC). Os privilégios permitem o usuário criar ou acessar recursos do banco de dados. Os privilégios podem ser concedidos para muitos objetos do banco de dados como bancos de dados, esquemas, espaços de tabelas, tabelas, visões, servidores, pacotes e índices. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.)

[4]

DB2Introdução às Autoridades de Banco de Dados — As autoridades fornecem uma maneira de agrupar privilégios e de controlar operações de manutenção e utilitários para instâncias, bancos de dados e objetos de banco de dados. Os usuários podem ter autoridades administrativas que oferecem privilégios completos em um conjunto de objetos de banco de dados ou podem ter autoridades do sistema que oferecem privilégios completos no gerenciamento do sistema, mas não permitem acesso aos dados. SYSADM é o mais alto nível de autoridade administrativa. Ele inclui todos os privilégios em bancos de dados na instância do DB2, além da autoridade para conceder e revogar todas as autoridades e privilégios. O DBADM oferece autoridade administrativa para um banco de dados específico. Ele permite que o usuário acesso e modifique todos os objetos nesse banco de dados. Um usuário com autoridade DBADM pode conceder e revogar privilégios no banco de dados, mas não pode conceder ou revogar a autoridade DBADM. SYSCTRL é a autoridade para controlar os recursos utilizados pelo gerenciador de banco de dados (por exemplo, criação e exclusão de bancos de dados), mas não permite acesso aos dados nos bancos de dados. SYSMAINT é a autoridade para executar operações de manutenção, como iniciar e parar o servidor DB2 e fazer backup e restauração de bancos de dados. Ele não permite acesso aos dados nos bancos de dados. A autoridade LOAD no nível do banco de dados, combinada com o privilégio INSERT na tabela, permite que o usuário carregue dados para essa tabela. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.)

[5]

collation; collating sequence — Um método para comparar duas cadeias de caracteres comparáveis. Todo conjunto de caracteres possui seu collation padrão. (Second Informal Review Draft) ISO/IEC 9075:1992, Database Language SQL- July 30, 1992. (N. do T.)

[6]

SQL Serverintercalação (collation) — é um conjunto de regras que determina como os dados são comparados, ordenados e apresentados. Os dados caractere são classificados de acordo com a informação de intercalação, que inclui o idioma, a ordem de classificação e a diferenciação de letras minúsculas e maiúsculas. SQL Server 2005 Books Online — Glossary of Terms (N. do T.)

[7]

collation é uma classificação apropriada para o idioma. Collation (N. do T.)

[8]

collation — [informática, computadores] — s. intercalação, f. collation | Portuguese | Dictionary & Translation by Babylon (N. do T.)

SourceForge.net Logo CSS válido!