Pular para o conteúdo

PostgreSQL, MySQL, SQL Server, Oracle: rede e SSL

Aula 4 de 89 minOperarAtualizada em 2026-10-04

Vídeo em produção

A gravação desta aula está no lote de produção. O objetivo, o exercício e a documentação já valem. Duração-alvo: 9 min.

Objetivo: Configurar allowlist dos 2 IPs de saída, SSH, VPN

Selo de estado: Preview (teto atual do produto) · Curso ACD-210 — Conectores e conexões · Aula 4 de 8 · Atualizado em 2026-10-04.

Objetivo#

Ao final desta aula você vai configurar allowlist dos 2 IPs de saída, SSH, VPN — e escolher o modo de rede e o nível de TLS certos para cada um dos quatro bancos relacionais.

Vídeo#

Identificador no manifesto: acd-210-04-bancos-relacionais · duração-alvo 9 min · tela do produto: /conexoes.

Roteiro de gravação (6 capítulos):

#Minutagem-alvoCapítuloTela do produto
10:00–0:50Abertura: título + selo. Os quatro bancos são Disponível/GA-candidato e compartilham a mesma régua./conexoes/nova
20:50–2:40São duas redes: o IP de saída da aplicação (teste) e o do executor (Cloud Run). Por que liberar um não basta./conexoes/nova
32:40–4:40O campo Como conectamos: direct · ssh · cloudsql · vpn. Os campos de bastion que aparecem em ssh./conexoes/nova
44:40–6:10TLS por banco: sslmode no PostgreSQL, encrypt no SQL Server; Service Name × SID no Oracle; portas padrão./conexoes/nova
56:10–7:40Usuário somente leitura: o GRANT mínimo e o que acontece quando falta USAGE/SELECT./conexoes/nova
67:40–9:00Ler as três capacidades do teste para isolar rede × credencial × permissão; o "faça você mesmo"./conexoes

Conteúdo#

Os quatro bancos relacionais são Disponível (maturidade GA-candidato): dá para cadastrar e usar hoje, sem liberação caso a caso. O que muda entre eles é pouco — porta padrão, o campo de TLS e, no Oracle, como o serviço é identificado. O que não muda é a rede.

São duas redes, e liberar uma só é o erro nº 1

O teste de conexão sai do servidor da aplicação. A execução do pipeline sai do executor (Cloud Run), que tem outro IP de saída e outra identidade. Um teste verde não prova que a execução agendada alcança a sua origem. Libere os dois IPs de saída no firewall, no Security Group ou na política do servidor.

Os quatro bancos, lado a lado

ConectorPorta padrãoCampo de TLSParticularidade
PostgreSQL5432sslmode: disable · require (padrão) · verify-ca · verify-fullErro clássico de política: no pg_hba.conf entry
MySQL3306— (ajuste pela exigência do servidor)Fluxo idêntico ao do PostgreSQL
SQL Server1433encrypt: sim (padrão) / nãoFalha típica de handshake quando encrypt contraria o servidor
Oracle1521—Conectar por: service (Service Name, padrão) ou sid (SID)

Os campos comuns das fichas (PostgreSQL, MySQL, SQL Server, Oracle) são os mesmos: host, port, database, schema (opcional), user e password 🔒.

Como conectamos: quatro modos de rede

O campo Como conectamos decide por onde o produto chega ao seu banco. O padrão é direct.

ModoQuando usarO que você precisa preparar
directIP público + allowlistLiberar os dois IPs de saída até a porta do banco
sshBanco sem exposição pública, atrás de bastionHost, porta (padrão 22) e usuário do bastion, mais a chave privada SSH (campo secreto 🔒)
cloudsqlInstância Cloud SQLAcesso por IP/proxy conforme a sua configuração no GCP
vpnIP privado por VPNRota privada estabelecida com a sua rede

Os campos sshHost, sshPort, sshUser e sshPrivateKey só aparecem quando você escolhe ssh — a chave privada é cifrada (AES-256-GCM) como qualquer outro segredo e nunca é reexibida.

Usuário somente leitura: o mínimo que basta

Peça ao responsável pela origem um usuário dedicado e somente leitura. O produto só executa SELECT. O tutorial do PostgreSQL publica o roteiro mínimo:

sql
CREATE USER ingestia_ro WITH PASSWORD 'troque-esta-senha';
GRANT CONNECT ON DATABASE producao TO ingestia_ro;
GRANT USAGE ON SCHEMA public TO ingestia_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO ingestia_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ingestia_ro;

Faltando USAGE ou SELECT, o sintoma é específico e fácil de confundir com erro de rede: Autenticação OK, Leitura falhou — ou uma lista de tabelas vazia. O catálogo é lido de information_schema.tables, excluindo schemas de sistema, com teto de 2.000 tabelas listadas.

Limites que mudam a sua proposta

  • Extração fragmentada: batchSize default 5.000 (faixa 100–50.000); maxRows default 200.000 (até 5.000.000).
  • Paginação: teto duro por execução (default 10.000 páginas / 5.000.000 linhas), com guarda anti-loop.
  • Incremental por watermark: append/keyset por coluna-chave. Não é CDC — não captura deletes nem UPDATEs fora da janela do watermark. CDC verdadeiro (WAL/redo/binlog) é Roadmap: não planeje integração crítica sobre isso.
  • Custo: a chamada ao seu banco não é cobrada pela plataforma; a carga Bronze consome load job do BigQuery (cobrável). Custo faturado real em nuvem = NÃO MEDIDO.

Segurança que você pode citar

Nomes de schema, tabela e coluna são sanitizados (só [A-Za-z0-9_$]) antes de entrar no SQL — guarda anti-injeção. Senha e chave SSH são cifradas e redigidas em qualquer erro ou log, inclusive na forma crua, URL-encoded e em JSON. E o escopo é por workspace: as linhas vão para a Bronze do seu workspace, nunca de outro.

No workspace Aurora Varejo

A Comércio Aurora tem o banco de vendas num PostgreSQL atrás de bastion. Maria escolhe Como conectamos = ssh, preenche o bastion (bastion.aurora.example, porta 22, usuário jump) e cola a chave privada de treino. sslmode fica em require. Ela testa: Rede: Falhou. Antes de mexer em senha, ela confere o roteiro certo — o bastion libera os dois IPs de saída? A porta 5432 está aberta do bastion para o banco? Quando a equipe de rede libera também o IP do executor, o teste passa em Rede e Autenticação, mas Leitura falha: faltou GRANT USAGE ON SCHEMA public. Três sintomas, três donos diferentes — e foi a leitura por capacidade que separou um do outro.

Erros comuns

SintomaCausa provávelO que fazer
connection refused / timeoutFirewall/allowlist ou rota erradaLibere o IP de saída da aplicação e o do executor; confira host:porta
password authentication failedUsuário/senha incorretosTeste o login fora do produto antes de culpar a conexão
no pg_hba.conf entry / SSL exigidoPolítica de SSL do servidorAjuste o sslmode para require ou verify-*
Handshake falha no SQL Serverencrypt contrariando o servidorAlinhe encrypt com a exigência da instância
Lista de tabelas vaziaFalta USAGE/SELECT, ou schema erradoConceda o mínimo e confirme o schema
Falha só no modo sshBastion ou chave incorretosRevise host, porta, usuário e a chave privada
Teste verde e execução agendada falhandoSó um dos dois IPs liberadoLibere o executor também — é o caso mais comum desta aula

Preview: o que ainda não é medido

A construção de SQL e a sanitização de identificadores são provadas por teste (GA-candidato). O que permanece Preview é a extração real — depende da credencial da sua origem — e a execução em nuvem: sem o ambiente do workspace configurado, a execução falha com mensagem, nunca finge sucesso. Latência e custo em BRL: NÃO MEDIDO.

Faça você mesmo#

No workspace de treino Aurora Varejo, como dono, com hosts sintéticos (*.example).

  1. Em /conexoes, use Nova conexão → PostgreSQL e vá até a etapa Acesso. Localize o aviso "são duas redes" e transcreva a frase que distingue o servidor da aplicação do executor dos pipelines.
  2. Abra a etapa Teste e anote os dois IPs de saída que o produto declara (o da aplicação, no aviso do teste, e o do executor, quando a tela o informa). Guarde-os: é essa lista que você entrega para quem cuida do firewall.
  3. Troque Como conectamos de direct para ssh e confirme que quatro campos novos aparecem (host, porta, usuário do bastion e chave privada). Volte para direct.
  4. Varie o SSL mode entre require e verify-full e observe que a escolha é sua, não do produto — depois deixe em require.
  5. Repita só a etapa Sistema → Acesso para MySQL (porta 3306), SQL Server (1433, campo encrypt) e Oracle (1521, Conectar por service/sid), anotando a diferença de cada um. Use Cancelar em cada tentativa.
  6. Volte ao PostgreSQL, complete a credencial de treino e rode Testar conexão. Registre as três capacidades separadamente (Rede, Autenticação, Leitura) e escreva, para o resultado que você obteve, quem resolveria: rede, dono do banco ou DBA de permissões.
  7. Monte o texto do pedido para a equipe de rede: os dois IPs, a porta do banco e o modo de rede escolhido.

Você terminou quando você tem os dois IPs de saída anotados, provou na tela que ssh acrescenta os campos de bastion, e consegue atribuir cada um dos três resultados do teste ao responsável correto.

Checagem rápida#

Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.

Documentação relacionada#

Capacidades ensinadas#

(conceitual — sem capacidade específica da matriz) — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".

Carregando seu progresso…