PostgreSQL - PRIVILEGES
Sempre que um objeto é criado em um banco de dados, um proprietário é atribuído a ele. O proprietário é geralmente aquele que executou a instrução de criação. Para a maioria dos tipos de objetos, o estado inicial é que apenas o proprietário (ou um superusuário) pode modificar ou excluir o objeto. Para permitir que outras funções ou usuários o usem, privilégios ou permissão devem ser concedidos.
Diferentes tipos de privilégios no PostgreSQL são -
- SELECT,
- INSERT,
- UPDATE,
- DELETE,
- TRUNCATE,
- REFERENCES,
- TRIGGER,
- CREATE,
- CONNECT,
- TEMPORARY,
- EXECUTE, e
- USAGE
Dependendo do tipo de objeto (tabela, função, etc.), os privilégios são aplicados ao objeto. Para atribuir privilégios aos usuários, o comando GRANT é usado.
Sintaxe para GRANT
A sintaxe básica para o comando GRANT é a seguinte -
GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
privilege - os valores podem ser: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.
object- O nome de um objeto ao qual conceder acesso. Os objetos possíveis são: tabela, visão, sequência
PUBLIC - Um pequeno formulário que representa todos os usuários.
GRUPO group - Um grupo a quem conceder privilégios.
username- O nome de um usuário a quem conceder privilégios. PUBLIC é uma forma abreviada que representa todos os usuários.
Os privilégios podem ser revogados usando o comando REVOKE.
Sintaxe para REVOKE
A sintaxe básica para o comando REVOKE é a seguinte -
REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
privilege - os valores podem ser: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.
object- O nome de um objeto ao qual conceder acesso. Os objetos possíveis são: tabela, visão, sequência
PUBLIC - Um pequeno formulário que representa todos os usuários.
GRUPO group - Um grupo a quem conceder privilégios.
username- O nome de um usuário a quem conceder privilégios. PUBLIC é uma forma abreviada que representa todos os usuários.
Exemplo
Para entender os privilégios, vamos primeiro criar um USUÁRIO da seguinte maneira -
testdb=# CREATE USER manisha WITH PASSWORD 'password';
CREATE ROLE
A mensagem CREATE ROLE indica que o USER "manisha" foi criado.
Considere a tabela COMPANY com os registros a seguir -
testdb# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Em seguida, vamos conceder todos os privilégios em uma mesa COMPANY para o usuário "manisha" da seguinte forma -
testdb=# GRANT ALL ON COMPANY TO manisha;
GRANT
A mensagem GRANT indica que todos os privilégios são atribuídos ao USUÁRIO.
Em seguida, revogemos os privilégios do USUÁRIO "manisha" da seguinte forma -
testdb=# REVOKE ALL ON COMPANY FROM manisha;
REVOKE
A mensagem REVOKE indica que todos os privilégios foram revogados do USUÁRIO.
Você pode até mesmo excluir o usuário da seguinte forma -
testdb=# DROP USER manisha;
DROP ROLE
A mensagem DROP ROLE indica que USER 'Manisha' foi excluído do banco de dados.