====== Permissões (PostgreSQL) ======
===== Criar um usuário =====
CREATE USER [usuário] WITH PASSWORD 'minha-senha';
===== Criar um banco =====
CREATE DATABASE [bd] OWNER [usuário] ENCODING 'UTF8';
ALTER SCHEMA public OWNER TO [usuário];
===== Conceder todas as permissões a um BD =====
GRANT ALL PRIVILEGES ON DATABASE [bd] TO [usuário];
GRANT ALL ON ALL TABLES IN SCHEMA public TO [usuário];
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO [usuário];
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO [usuário];
Também é possível conceder permissões a outros schemas:
GRANT ALL ON ALL TABLES IN SCHEMA [outro-schema] TO [usuário];
GRANT ALL ON ALL SEQUENCES IN SCHEMA [outro-schema] TO [usuário];
GRANT ALL ON ALL FUNCTIONS IN SCHEMA [outro-schema] TO [usuário];
===== Revogar permissões =====
As sintaxes são semelhantes às do tópico anterior, para isso basta trocar a expressão ''GRANT'' por **REVOKE**:
REVOKE ALL PRIVILEGES ON DATABASE [bd] FROM [usuário];
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM [usuário];
REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM [usuário];
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM [usuário];
===== Conceder permissões de um usuário para outro =====
GRANT usuárioA TO usuárioB;
O comando acima faz com que o **usuárioB** tenha as mesmas permissões do **usuárioA**.
Útil quando um desenvolvedor precisa de acesso a um BD utilizando as permissões do usuário da aplicação.
O **REVOKE** também é possível neste comando:
REVOKE usuárioA FROM usuárioB;
===== Ownership =====
==== Reatribuir ownership de todos os objetos do banco ====
REASSIGN OWNED BY usuárioA TO usuárioB;
Reatribui todos os objetos que eram propriedade do **usuárioA** para o **usuárioB**.
==== Eliminar ownership de um usuário ====
DROP OWNED BY usuárioA;
Retira o onwership de **usuárioA** em todos os objetos do banco.
===== Arquivo de permissão de acesso =====
Edite o arquivo ''/var/lib/pgsql/9.3/data/pg_hba.conf'' para dar permissão.
host [banco] [usuário] [CIDR-da-rede] md5
Depois dê um reload no serviço.
systemctl reload postgresql-9.3.service
===== Links interessantes =====
* **GRANT:** [[https://www.postgresql.org/docs/9.0/static/sql-grant.html]]
* **REVOKE:** [[https://www.postgresql.org/docs/9.0/static/sql-revoke.html]]
* **ALTER DEFAULT PRIVILEGES:** [[https://www.postgresql.org/docs/9.0/static/sql-alterdefaultprivileges.html]]