Executando verificação de segurança...
2

Instalação e Configuração do PostgreSQL

Devs estou a estudar banco de dados, atualmente no PostgreSQL, uso linux mais especificamente archlinux e cheguei até aqui olhem essa configurção e de suas opiniões concretas.

Instalar PostgreSQL

sudo pacman -S postgresql

Depois de intalado iniciar o shell do postgresql:

sudo -iu postgres

Antes que o PostgreSQL possa funcionar corretamente, o cluster de banco de dados deve ser inicializado:

initdb -D /var/lib/postgres/data
Os arquivos pertencentes a este sistema de banco de dados serão de propriedade do usuário "postgres".
Este usuário também deve possuir o processo do servidor.

O cluster de banco de dados será inicializado com a localização "C.UTF-8".
A configuração de pesquisa de texto padrão será definida como "inglês".

Os checksums da página de dados estão ativados.

Criar diretório /var/lib/postgres/data ... ok
Criando subdiretórios ... ok
Selecionando implementação de memória compartilhada dinâmica ... posix
Selecionando max_connections padrão ... 100
Selecionar padrão shared_buffers ... 128 MB
Selecionando o fuso horário padrão ... UTC (em inglês)
criando arquivos de configuração ... ok
executando bootstrap script ... ok
Realizar a inicialização pós-bootstrap ... ok
sincronizando dados com o disco ... ok

initdb: aviso: permitindo a autenticação "trust" para conexões locais
initdb: hint: Você pode alterar isso editando pg_hba.conf ou usando a opção -A, ou --auth-local e --auth-host, na próxima vez que você executar initdb.

- Sucesso. Agora você pode iniciar o servidor de banco de dados usando:

    pg_ctl -D /var/lib/postgres/data -l logfile start

Se estes são o tipo de linhas que você vê, então o processo foi bem sucedido. Retorno ao usuário regular usando exit.

Por último:

sudo systemctl start postgresql

Esse comando inicia o serviço do PostgreSQL imediatamente.

  • Ele executa o PostgreSQL agora, mas não garante que ele será iniciado automaticamente após reiniciar o sistema.

  • É útil quando você acabou de instalar o PostgreSQL e quer começar a usá-lo.

sudo systemctl enable postgresql

Esse comando ativa o serviço para que ele inicie automaticamente toda vez que o sistema for ligado (boot).

  • Ele não inicia o serviço agora — apenas configura o autostart.

  • Cria um link simbólico para o serviço em /etc/systemd/system/multi-user.target.wants/.

Se tudo deu certo até aqui, agora configurar o usuario e senha do postgresql, o postgresql já vem por padrão com o usuario postgres, você pode colocar uma senha e pronto. Mas ser quiser criar um novo ususario e senha:

createuser --interactive

Este comando cria um novo usuario, e pergunta se quer deixar esse usario superusuario, aqui não cria uma nova senha, depois você terá que entrar no banco de dados e criar uma nova senha, tipo:

psql -U postgres

// dentro do banco comando sql

ALTER ROLE nome_do_usuario WITH PASSWORD 'sua_senha_segura';

// não esqueça do ponto e virgula no final de cada comando sql.

Se ainda não criou o usuário, use:

createuser --interactive --pwprompt

Esse comando vai te perguntar:

  • Nome do usuário

  • Se é superuser

  • E a senha (com prompt interativo)

Segurança

  • Nunca use senhas fracas, especialmente se o banco estiver exposto a redes.

  • Evite logar esse comando em históricos (como .bash_history) — prefira usar psql interativo.

Caso precise excluir um usuario PostgreSQL, use:

DROP ROLE nome_do_usuario;

Atenção antes de excluir

Você só pode excluir um usuário se:

  1. Ele não for dono de nenhum objeto (tabelas, bancos, funções, etc.)

  2. Ele não estiver conectado no momento

Passos seguros para excluir um usuário

1. Verifique se o usuário é dono de algo

Execute no psql:

SELECT tablename FROM pg_tables WHERE tableowner = 'nome_do_usuario';

Se ele for dono de objetos, você pode:

  • Transferir a propriedade:
ALTER TABLE nome_tabela OWNER TO novo_dono;

Ou deletar os objetos antes.

Verifique se ele está conectado:

SELECT pid, usename FROM pg_stat_activity WHERE usename = 'nome_do_usuario';

Se aparecer, mate a conexão (se for seguro):

SELECT pg_terminate_backend(pid);

Excluir o usuário

DROP ROLE nome_do_usuario;

Configurando o acesso e segurança do PostgreSQL

No Arch Linux, para encontrar o diretório do pg_hba.conf (arquivo de controle de acesso do PostgreSQL), use o seguinte comando no terminal:

sudo -u postgres psql -c "SHOW hba_file;"

1. Ajuste o pg_hba.conf corretamente

Esse arquivo controla quem pode conectar, de onde e com qual método.

  • Use scram-sha-256 (mais seguro que md5):
# Exemplo seguro:
host    all     all     192.168.0.0/24    scram-sha-256

Evite trust, exceto para ambientes de teste locais.

2. Use senhas fortes com scram-sha-256

No postgresql.conf, ative:

password_encryption = scram-sha-256

3. Desative o superusuário remoto

Evite que postgres (ou outros superusers) conectem via rede:

No pg_hba.conf, restrinja isso:

# Negar acesso remoto ao superuser
host    all     postgres    0.0.0.0/0     reject

4. Use o mínimo de privilégios possível (principle of least privilege)

  • Crie usuários separados para leitura, escrita, administração, etc.

  • Exemplo:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO leitura;
GRANT INSERT, UPDATE ON minha_tabela TO escrita;

5. Ative RLS (Row-Level Security) quando necessário

ALTER TABLE minha_tabela ENABLE ROW LEVEL SECURITY;

CREATE POLICY politica_usuario
  ON minha_tabela
  FOR SELECT
  USING (user_id = current_user::text);

6. Use SSL/TLS para conexões criptografadas

No postgresql.conf:

ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'

7. Monitore atividades e logs

Habilite logs em postgresql.conf:

log_connections = on
log_disconnections = on
log_statement = 'ddl'

E revise periodicamente os logs em /var/lib/postgres/data/log/ ou /var/log/postgresql/.

8. Atualize sempre o PostgreSQL

Use o gerenciador de pacotes do Arch:

sudo pacman -Syu postgresql

9. Restrinja o acesso ao sistema

  • O processo do PostgreSQL deve rodar como o usuário postgres.

  • Proteja a pasta de dados (/var/lib/postgres/data) com permissões corretas.

chown -R postgres:postgres /var/lib/postgres
chmod 700 /var/lib/postgres/data

10. Use um firewall

No Arch Linux, ative e configure o ufw ou iptables para permitir apenas IPs autorizados.

Exemplo com ufw:

sudo ufw allow from 192.168.1.0/24 to any port 5432

Depois de tudo configurado

Restarta o postgresql toda vez que editar as configurações:\1

sudo systemctl restart postgresql

Para entrar (logar) com um novo usuário no PostgreSQL no terminal do Linux.

1. Usando o comando psql com login direto:

psql -U nome_do_usuario -d nome_do_banco

2. Se quiser forçar um host local e porta específica:

psql -U nome_do_usuario -d nome_do_banco -h localhost -p 5432
Carregando publicação patrocinada...