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-alvo | Capítulo | Tela do produto |
|---|---|---|---|
| 1 | 0:00–0:50 | Abertura: título + selo. Os quatro bancos são Disponível/GA-candidato e compartilham a mesma régua. | /conexoes/nova |
| 2 | 0:50–2:40 | Sã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 |
| 3 | 2:40–4:40 | O campo Como conectamos: direct · ssh · cloudsql · vpn. Os campos de bastion que aparecem em ssh. | /conexoes/nova |
| 4 | 4:40–6:10 | TLS por banco: sslmode no PostgreSQL, encrypt no SQL Server; Service Name × SID no Oracle; portas padrão. | /conexoes/nova |
| 5 | 6:10–7:40 | Usuário somente leitura: o GRANT mínimo e o que acontece quando falta USAGE/SELECT. | /conexoes/nova |
| 6 | 7:40–9:00 | Ler 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
| Conector | Porta padrão | Campo de TLS | Particularidade |
|---|---|---|---|
| PostgreSQL | 5432 | sslmode: disable · require (padrão) · verify-ca · verify-full | Erro clássico de política: no pg_hba.conf entry |
| MySQL | 3306 | — (ajuste pela exigência do servidor) | Fluxo idêntico ao do PostgreSQL |
| SQL Server | 1433 | encrypt: sim (padrão) / não | Falha típica de handshake quando encrypt contraria o servidor |
| Oracle | 1521 | — | 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.
| Modo | Quando usar | O que você precisa preparar |
|---|---|---|
direct | IP público + allowlist | Liberar os dois IPs de saída até a porta do banco |
ssh | Banco sem exposição pública, atrás de bastion | Host, porta (padrão 22) e usuário do bastion, mais a chave privada SSH (campo secreto 🔒) |
cloudsql | Instância Cloud SQL | Acesso por IP/proxy conforme a sua configuração no GCP |
vpn | IP privado por VPN | Rota 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:
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:
batchSizedefault 5.000 (faixa 100–50.000);maxRowsdefault 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
| Sintoma | Causa provável | O que fazer |
|---|---|---|
connection refused / timeout | Firewall/allowlist ou rota errada | Libere o IP de saída da aplicação e o do executor; confira host:porta |
password authentication failed | Usuário/senha incorretos | Teste o login fora do produto antes de culpar a conexão |
no pg_hba.conf entry / SSL exigido | Política de SSL do servidor | Ajuste o sslmode para require ou verify-* |
| Handshake falha no SQL Server | encrypt contrariando o servidor | Alinhe encrypt com a exigência da instância |
| Lista de tabelas vazia | Falta USAGE/SELECT, ou schema errado | Conceda o mínimo e confirme o schema |
Falha só no modo ssh | Bastion ou chave incorretos | Revise host, porta, usuário e a chave privada |
| Teste verde e execução agendada falhando | Só um dos dois IPs liberado | Libere 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).
- 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. - 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.
- Troque Como conectamos de
directparasshe confirme que quatro campos novos aparecem (host, porta, usuário do bastion e chave privada). Volte paradirect. - Varie o SSL mode entre
requireeverify-fulle observe que a escolha é sua, não do produto — depois deixe emrequire. - Repita só a etapa Sistema → Acesso para MySQL (porta 3306), SQL Server (1433, campo
encrypt) e Oracle (1521, Conectar porservice/sid), anotando a diferença de cada um. Use Cancelar em cada tentativa. - 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.
- 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#
- data/tutoriais/conectar-postgresql
- data/conectores/postgresql
- data/conectores/mysql
- data/conectores/sqlserver
- data/conectores/oracle
- data/ingestao-incremental-backfill — watermark, e por que não é CDC
- primeiros-passos/primeira-fonte — o aviso "são duas redes", na própria tela
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".