concessão e revogação de privilégios

Propaganda
BANCO DE DADOS WEB
AULA 9
concessão e revogação de privilégios
professor Luciano Roberto Rocha
www.lrocha.com
O que são privilégios
Quem cria o objeto no banco de dados se torna o seu
dono. Por padrão, apenas o dono do objeto pode fazer
qualquer coisa com o objeto.
Para permitir outros usuários utilizarem o objeto, devem ser
concedidos privilégios.
Os usuários que possuem o atributo de superusuário sempre
podem acessar qualquer objeto independentemente dos
privilégios definidos para o objeto.
O direito de modificar e destruir um objeto são sempre
privilégios exclusivos do seu criador.
2
O que são privilégios
Existem vários privilégios diferentes: SELECT, INSERT, UPDATE,
DELETE, RULE, REFERENCES, TRIGGER, CREATE, TEMPORARY,
EXECUTE e USAGE.
Os privilégios aplicáveis a um determinado tipo de objeto
variam de acordo com o tipo do objeto (tabela, função,
etc.).
Para conceder privilégios a usuários e grupos, utiliza-se o
comando GRANT.
Qualquer privilégio concedido pelo comando GRANT é
adicionado aos já concedidos, se existirem.
3
Como definir privilégios
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 ]
4
Como definir privilégios
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.
5
Como definir privilégios
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.
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), entretanto, o dono
pode decidir revogar alguns de seus próprios privilégios por
motivo de segurança.
6
Tipos de privilégios
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. Para as seqüências, este privilégio permite o uso das funções
nextval e setval.
DELETE
Permite excluir (DELETE) linhas da tabela especificada.
7
Tipos de privilégios
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).
TEMPORARY
TEMP
Permite a criação de tabelas temporárias ao usar o banco de dados.
8
Tipos de privilégios
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 (tablespaces), 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.
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).
9
Tipos de privilégios
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.
10
Conceder um Privilégio
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;
Conceder o privilégio de consulta na tabela contas para o grupo contabilidade:
GRANT SELECT ON contas TO GROUP contabilidade;
Conceder, para o usuário sergio, todos os privilégios no banco winestore e
extender a ele a possibilidade de conceder privilégios a outros usuários:
GRANT ALL ON DATABASE winestore TO sergio WITH GRANT OPTION
11
Listar os privilégios
Pode ser usado o comando \z ou \dp 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)
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;
12
Listar os privilégios
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
w
a
d
R
x
t
X
U
C
T
arwdRxt
*
--------------
SELECT ("read")
UPDATE ("write")
INSERT ("append")
DELETE
RULE
REFERENCES
TRIGGER
EXECUTE
USAGE
CREATE
TEMPORARY
ALL PRIVILEGES (para tabelas)
opção de concessão para o privilégio precedente
/yyyy -- usuário que concedeu o privilégio
13
Revogar privilégios
REVOKE: revoga privilégios de acesso.
Descrição
O comando REVOKE revoga, de um ou mais usuários ou grupos de
usuários, privilégios concedidos anteriormente. A palavra chave PUBLIC
se refere ao grupo contendo todos os usuários, definido implicitamente.
Sinopse
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] nome_da_tabela [, ...]
FROM { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
14
Revogar privilégios
Deve ser observado que um determinado usuário possui a
soma dos privilégios concedidos diretamente para o próprio
usuário, mais os privilégios concedidos para os grupos dos
quais é membro no momento, mais os privilégios
concedidos para PUBLIC.
Daí, por exemplo, revogar o privilégio SELECT de PUBLIC
não significa, necessariamente, que todos os usuários
perderão o privilégio SELECT para o objeto: os usuários
que receberam o privilégio diretamente, ou por meio de
um grupo, ainda terão o privilégio.
Se for especificado GRANT OPTION FOR somente a opção
de concessão do privilégio é revogada, e não o próprio
privilégio. Caso contrário, tanto o privilégio quanto a
opção de concessão serão revogados.
15
Revogar um Privilégio
Exemplos
Revogar o privilégio de inserção na tabela filmes concedido para
todos os usuários:
REVOKE INSERT ON filmes FROM PUBLIC;
Revogar todos os privilégios concedidos ao usuário manuel sobre a
visão vis_tipos:
REVOKE ALL PRIVILEGES ON vis_tipos FROM manuel;
Obs.: Deve ser observado que este comando significa, na verdade, “revogue
todos os privilégios que eu concedi”.
16
Casos especiais
Um determinado usuário pode revogar somente os privilégios
que foram concedidos diretamente por este usuário.
Se, por exemplo, o usuário A concedeu um privilégio com opção
de concessão para o usuário B, e o usuário B por sua vez
concedeu o privilégio para o usuário C, então o usuário A não
poderá revogar diretamente o privilégio de C. Em vez disso, o
usuário A poderá revogar a opção de concessão do usuário B
usando a opção CASCADE, para que o privilégio seja, por sua
vez, revogado do usuário C.
Outro exemplo é o caso em que tanto A quanto B concederam
o mesmo privilégio a C: neste caso A poderá revogar sua própria
concessão, mas não poderá revogar a concessão feita por B e,
portanto, C continuará com o privilégio mesmo que A revogue o
17
privilégio.
18
Download