Drivers JDBC — Catálogo Oficial e Governança
Baixar driver de banco em site duvidoso, descobrir a incompatibilidade só em produção e nunca saber se aquele JAR carrega uma vulnerabilidade conhecida: esse era o custo invisível de conectar cada fonte nova. O DATTA elimina esse risco com um catálogo oficial de 39 drivers JDBC e uma esteira de validação de segurança pela qual todo JAR passa — baixado automaticamente ou enviado por você — antes de ficar disponível para qualquer conexão.
A gestão fica em , restrita a administradores. Este guia cobre suas responsabilidades sobre o catálogo: instalação inicial, envio manual, validação, ciclo de vida e monitoramento.
Quem faz o quê
| Momento | Quem executa | O que acontece |
|---|---|---|
| Instalação da plataforma | Script setup-datta.sh (Fase 7) | Baixa, valida e registra os drivers de licença aberta |
| Driver com licença click-through | Administrador | Baixa do site do fornecedor e envia pela tela |
| Depois de instalado | Administrador, pela tela | Aprova, descontinua, coloca em quarentena, remove, revalida |
A plataforma não faz mais bootstrap automático no backend — toda a inicialização foi movida para o setup-datta.sh (commit 277661e, "refactor: move all initial setup from backend to setup-datta.sh"). Uma vez instalados, os drivers passam a ser gerenciados em runtime pela tela e pela API de administração.
O que já vem no catálogo (39 drivers)
- Relacionais open-source: PostgreSQL, MySQL, MariaDB, SQLite, H2, HSQLDB, Apache Derby, CockroachDB (usa o driver PostgreSQL) e TimescaleDB (idem).
- Analíticos / colunares: DuckDB, ClickHouse, Apache Druid (via Avatica), Apache Pinot, Apache Doris e StarRocks (ambos compatíveis com MySQL).
- Data warehouse / nuvem: Snowflake, Amazon Redshift, Azure Synapse (compatível com SQL Server), Databricks (download manual), IBM Db2.
- Enterprise: Oracle (manual), Microsoft SQL Server, SAP HANA, Teradata (manual), IBM Informix (manual), SAP ASE jConnect (manual), Firebird (Jaybird), Vertica, Exasol.
- Query engines: Trino, PrestoDB, Apache Spark Thrift (via Hive JDBC), Apache Hive, Apache Impala (Cloudera, manual), Apache Phoenix, Apache Drill.
- Séries temporais: QuestDB (compatível com PostgreSQL), Apache IoTDB, InfluxDB 3.x (via Flight SQL).
São 39 entradas no catálogo oficial, versionado por uma tag de versão que o desenvolvedor incrementa a cada mudança estrutural (campo novo, troca de licença).
Dialetos SQL: você escreve uma vez, a plataforma traduz
Cada driver do catálogo tem um dialeto correspondente registrado na biblioteca de dialetos da plataforma — hoje 39 dialetos, alguns compartilhados (CockroachDB reaproveita o do PostgreSQL, Synapse o do SQL Server). O dialeto absorve as diferenças de cada fornecedor:
- introspecção de catálogo (
ALL_TABLEScontrainformation_schema); - sensibilidade a maiúsculas (Oracle trabalha em caixa alta);
- aspas em identificadores;
- paginação (LIMIT/OFFSET, FETCH ou ROWNUM);
- tipos de data (TIMESTAMP, DATETIME2, TIMESTAMPTZ);
- sintaxe de MERGE/UPSERT.
Regra de arquitetura: lógica específica de fornecedor mora no dialeto e em nenhum outro lugar.
Instalação inicial (Fase 7 do setup-datta.sh)
Quando o operador roda ./setup-datta.sh, a Fase 7 — "Download e upload dos drivers JDBC oficiais" — faz, em sequência:
- Autentica como administrador para obter as credenciais da sessão.
- Para cada driver do catálogo que não seja alias nem exija download manual: baixa o JAR da URL oficial do fornecedor para o diretório de logs da instalação e o envia à plataforma junto dos metadados (chave, versão, fornecedor). O endpoint de envio de driver está descrito na referência de API.
- A esteira de validação roda na hora; passando, o driver é registrado como Aprovado.
- Drivers de licença click-through são pulados com aviso — cabe a você baixá-los e enviá-los pela tela (próxima seção).
A flag --skip-drivers pula a Fase 7 inteira: use quando precisar rodar o setup de novo sem refazer os downloads.
Download manual: drivers com licença click-through
Alguns fornecedores exigem aceite explícito de licença no próprio site. Para esses, o download automático é pulado e o driver aparece na tabela com a badge Download manual e link direto para a página oficial:
| Driver | Página oficial | Observação |
|---|---|---|
| Oracle (OTN) | <https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html> | Aceitar o OTN License Agreement |
| Databricks | <https://www.databricks.com/spark/jdbc-drivers-download> | Login Databricks + EULA |
| Teradata | <https://downloads.teradata.com/download/connectivity/jdbc-driver> | Registro no portal |
| Cloudera Impala | <https://www.cloudera.com/downloads/connectors/impala/jdbc.html> | Login Cloudera + licença comercial |
| IBM Informix | <https://www.ibm.com/support/pages/download-information-informix-jdbc-driver-version-4> | IBM ID + IPLA |
| SAP ASE (Sybase) | <https://help.sap.com/docs/SAPASEJCONNECT> | Parte do SAP ASE client |
| BigQuery (Simba) | <https://cloud.google.com/bigquery/docs/reference/odbc-jdbc-drivers> | Apenas se você exigir JDBC — o DATTA usa conector nativo |
Passo a passo: enviando o driver Oracle
- Abra a página oficial pelo link da linha do driver e baixe o JAR, aceitando a licença OTN.
- Em , clique em Adicionar driver.
- Selecione o arquivo
.jare informe nome, fornecedor, versão e a classe do driver. - Confirme o envio. A esteira de validação roda na hora; passando, o driver entra como Aprovado e já pode ser usado em novas conexões.
Se o mesmo JAR já tiver sido enviado antes, a plataforma reconhece pelo hash SHA-256 e reaproveita o registro existente, sem criar duplicata — o evento fica registrado como DRIVER.UPLOAD_DEDUP.
Validação de segurança: nenhum JAR entra sem passar pela esteira
Todo JAR — vindo do setup ou enviado por você — atravessa cinco etapas em sequência:
- Análise estática de bytecode: classes com chamadas perigosas (
Runtime.exec,ProcessBuilder,System.loadLibrary) são rejeitadas, assim como JARs pequenos demais para serem um driver real. - Varredura de vulnerabilidades contra a base local de CVEs (Trivy / Grype): achado HIGH ou CRITICAL não mitigado bloqueia o driver.
- Verificação de assinatura digital, quando o fornecedor publica
.ascou hash.sha256. - Teste de carga isolado: a classe do driver é carregada em um carregador de classes isolado, para garantir que ela sobe sem exceção não tratada antes de qualquer conexão real.
- Extração segura do JAR e inferência de metadados, que completam a ficha do driver.
Falhou em qualquer etapa? O resultado da validação é registrado com o motivo e o driver vai para Quarentena — nunca fica exposto para uso.
Ciclo de vida e governança
Os três status
| Status | Significado |
|---|---|
| Aprovado | Em uso, disponível para toda a plataforma |
| Descontinuado | Ainda carrega, mas não é recomendado; a tela mostra a badge |
| Quarentena | Bloqueado — qualquer tentativa de uso gera erro e registro de auditoria |
Driver recém-enviado que passa na validação vai direto para Aprovado; falha de validação vai direto para Quarentena. Não existe estado intermediário de revisão pendente.
Ações do administrador
| Ação | Efeito |
|---|---|
| Aprovar | Promove um driver em quarentena a aprovado — é um override da validação, e a justificativa fica na auditoria |
| Descontinuar | Marca o driver como descontinuado; novas conexões passam a receber aviso em português desencorajando o uso |
| Colocar em quarentena | Bloqueia o driver. Havendo conexões ativas, a auditoria registra o impacto e você tem 48 horas para migrar ou revogar |
| Remover | Exclusão definitiva, permitida apenas sem conexões ativas (ou forçada, com justificativa na auditoria) |
| Revalidar | Roda a esteira de validação de novo sobre um driver já instalado — faça isso sempre que a base local de CVEs for atualizada |
Documentação do fornecedor para o Copilot
A plataforma reindexa a documentação do fabricante de cada driver para alimentar as respostas sobre a fonte. A ingestão roda em segundo plano: o pedido responde na hora e o progresso é consultado em seguida (RUNNING / COMPLETED / FAILED) — os dois endpoints estão na referência de API. O rastreamento baixa as páginas de um mesmo nível em paralelo, controlado por datta.doc-ingest.crawl-concurrency (padrão 6), com teto global de tempo em datta.doc-ingest.crawl-timeout-seconds (padrão 120).
Trilha de auditoria
Toda ação de governança emite evento:
| Evento | Quando |
|---|---|
DRIVER.UPLOAD | JAR enviado e validado |
DRIVER.UPLOAD_DEDUP | JAR idêntico a um já instalado (hash SHA-256 coincide) |
DRIVER.APPROVE | Promovido a aprovado |
DRIVER.DEPRECATE | Marcado como descontinuado |
DRIVER.QUARANTINE | Bloqueado |
DRIVER.DELETE | Removido fisicamente |
DRIVER.FETCH_DOCS | Documentação do fornecedor reindexada |
DRIVER.FETCH_DOCS_FAILED | Ingestão de documentação falhou (com URL e erro) |
DRIVER.RESCAN | Esteira rodada novamente sobre driver existente |
Monitoramento
As métricas Micrometer de drivers ficam no endpoint de métricas Prometheus da plataforma e cobrem:
- latência de validação — pelas métricas de requisição HTTP, ou por métrica dedicada quando exposta;
- quantidade de drivers por status —
datta_drivers_by_statusquando implementada; caso contrário, derivada de leitura do grafo; - resultados da esteira —
datta_drivers_validation_outcome.
Três sinais merecem alerta:
| Sinal | O que costuma significar |
|---|---|
Pico de DRIVER.QUARANTINE em pouco tempo | CVE novo publicado afetando dependências já instaladas — revalide o parque |
DRIVER.DELETE em operação | Deve ser raro; confira na auditoria quem removeu e por quê |
Nenhum DRIVER.UPLOAD há muitos dias, com catálogo esperando entrada nova | Provável falha na Fase 7 do setup-datta.sh |
Fontes nativas ficam fora do catálogo JDBC
Fontes com capacidades que um driver JDBC genérico não alcança usam conectores nativos do motor de execução da plataforma — de propósito. Empacotar um wrapper JDBC para elas seria trocar o melhor de cada engine por um mínimo denominador comum:
| Fonte | Conector nativo | Capacidade que se perderia via JDBC |
|---|---|---|
| Neo4j | org.neo4j:neo4j-java-driver | Cypher, caminhos de comprimento variável, algoritmos de grafo (GDS) |
| Apache Cassandra | com.datastax.oss:java-driver-core | Paginação assíncrona, balanceamento token-aware |
| MongoDB | org.mongodb:mongodb-driver-sync | Pipeline de agregação, change streams |
| BigQuery | google-cloud-bigquery + Storage Read API | Leitura 10–100x mais rápida, estimativa de custo em dry-run |
| OpenSearch | org.opensearch.client:opensearch-java | Busca vetorial (KNN), highlight, scripting |
| Elasticsearch | cliente oficial | KNN de primeiro nível, autenticação por ApiKey |
| Kafka / Pulsar | clientes nativos | Streaming contínuo e captura de mudanças (CDC) |
Drivers JDBC para essas fontes não entram no catálogo oficial.
Para desenvolvedores: adicionar um driver ao catálogo
Incluir um driver novo no catálogo oficial é mudança de código, feita na lista oficial de drivers da plataforma:
- Declare a entrada com a chave do driver.
- Preencha nome, fornecedor, versão, classe do driver, página de origem, URL da documentação, tipo de licença, exemplo de URL JDBC, porta padrão e tags.
- Se o JAR puder ser baixado direto (Maven Central, por exemplo), informe a URL de download; quando o fornecedor publica
.sha256, registre o hash esperado. - Licença click-through: marque o driver como de download manual e como exigindo aceite de licença.
- Alias: aponte para a chave base (CockroachDB aponta para
postgresql). - Registre o dialeto correspondente na biblioteca de dialetos, se ainda não existir.
- Incremente a tag de versão do catálogo.
- Ajuste a Fase 7 do
setup-datta.shapenas se o driver exigir tratamento especial — o laço genérico cobre o caso normal. - Sempre que possível, adicione um teste da esteira de validação.
Referências
- Runbook de streaming (Kafka/Debezium): Runbook — Streaming (F9).
- Operação das conexões, incluindo backup e reencriptação de credenciais: Runbook — Gestão de Conexões.
- Endpoints de catálogo, envio e documentação de drivers: referência de API.