Esse tutorial busca abordar o básico do básico das configurações de um banco de dados em produção. Utilizaremos como exemplo a versão 15 do PostgreSQL e a ferramenta psql para manipular o bd.
Mudar a senha do usuário ‘postgres’
Quando o PostgreSQL é instalado, é criado o usuário ‘postgres’ sem senha. Você precisa configurar uma senha para não ser invadido.
Dica de segurança
O usuário ‘postgres’ só deve ser utilizado para configurar o SGDB, nunca utilize-o como usuário para conectar no BD de produção.
Abra o terminal e altere para o usuário postgres
sudo su - postgres
Entrar no terminal do PostgreSQL via psql
psql -U postgres
Alterar a senha do usuário ‘postgres’
\password postgres
Será solicitado duas vezes a senha. Insira uma senha forte, com mais de 14 caracteres, misturando letras, números e caracteres especiais. Uma senha diferente desse padrão pode ser quebrada em pouco tempo utilizando força bruta.
Criando o user/role
No PostgreSQL o conceito de usuário está contido em ROLES. O comando CREATE USER na verdade é uma alias para o CREATE ROLE.
Dica de segurança
Você deve criar um usuário exclusivo para utilização da aplicação. Ele deve ter pouquíssimas permissões nesse banco.
Entrando no BD
psql -d meuBD
Criando uma role
CREATE ROLE umUsuarioNaoObvio
WITH LOGIN ENCRYPTED PASSWORD 'UmaSenhaComMaisDe14Caracteres';
Listando as roles
\du
Deletando uma role
DROP ROLE umUsuarioNaoObvio;
Dando permissões a uma rule
Utilizando o GRANT, devemos limitar o que cada usuário pode fazer. Exemplo:
GRANT SELECT, INSERT, UPDATE, DELETE ON users TO umUsuarioNaoObvio;
O usuário “umUsuarioNaoObvio” só pode executar as operações básicas de CRUD na tabela ‘users’.
Dica de segurança
Um usuário de produção não deve ter permissão de alterar ou criar estruturas no BD.
Permitindo conexão de outros hosts
Até o momento o cluster do PostgreSQL só permite conexões vindas do localhost, agora vamos permitir que conexões TCP/IP sejam aceitas.
Abra o arquivo postgresql.conf
vim /etc/postgresql/15/main/postgresql.conf
Vamos permitir somente conexões que chegam por uma interface específica. Adicione o IP da interface de rede onde o PostgreSQL está sendo executado.
listen_addresses = '192.168.0.82'
Reinicie o serviço do PostgreSQL
service postgresql restart
Gerenciando as conexões com o PostgreSQL
No arquivo pg_hba.conf (Host-Based Authentication) é feito o gerenciamento de quem e como pode se conectar no cluster do Postgres. Na documentação há diversos exemplos de como fazer isso, mas levando em consideração que queremos o mais seguro possível, podemos usar o exemplo abaixo como ponto de partida:
Abrindo o arquivo pg_hba.conf
vim /etc/postgresql/15/main/pg_hba.conf
Configuração de exemplo
# TYPE DATABASE USER ADDRESS METHOD
hostssl meuBD usuarioNaoObvio 172.85.86.101/19 scram-sha-256
TYPE = hostssl
Permite conexão via TCP/IP criptografadas com SSL/TLS
DATABASE = meuBD
Especificando qual banco pode ser acessado.
USER = usuarioNaoObvio
Especificando qual usuário pode conectar no banco.
ADDRESS = 172.85.86.101/19
Especificando qual IP pode se conectar.
METHOD = scram-sha-256
Especificando qual método de autenticação será utilizado.
Reinicie o serviço do PostgreSQL
service postgresql restart
Referências
- https://www.postgresql.org/docs/current/runtime-config-connection.html
- https://www.postgresql.org/docs/16/sql-createuser.html
- https://www.postgresqltutorial.com/postgresql-administration/postgresql-roles/
- https://www.postgresql.org/docs/current/ddl-priv.html
- https://www.postgresqltutorial.com/postgresql-administration/postgresql-grant/
- https://www.postgresql.org/docs/current/auth-pg-hba-conf.html