Pular para conteúdo

Aula 07 - Integração com Banco de Dados 💾

Conectando IAs ao Mundo dos Dados


Agenda de Hoje 📅

  1. Bancos Relacionais vs NoSQL
  2. Segurança no Acesso de Dados
  3. SQL Injection e Parametrização
  4. Expondo Schemas para a IA
  5. CRUD via MCP

1. O Acesso a Dados pela IA 🗄️

  • IA lê o contexto (Resources).
  • IA altera os dados (Tools).
  • IA analisa padrões em massa.

2. Ameaça: SQL Injection 🛡️

  • Risco de comandos maliciosos via chat.
  • Um "prompt injection" pode virar um "SQL injection".

2.1 Solução: Prepared Statements

-- RUIM
"SELECT * FROM users WHERE id = " + user_input

-- BOM
"SELECT * FROM users WHERE id = ?" (param: user_input)

3. Prática: Busca Segura no SQLite

@mcp.tool()
def buscar_cliente(nome_parcial: str):
    # Uso obrigatório de parâmetros (?)
    query = "SELECT * FROM clientes WHERE nome LIKE ?"
    return db.execute(query, (f"%{nome_parcial}%",))

4. Expondo o Dicionário de Dados 🔍

  • A IA precisa saber as colunas existentes.
  • Use Resources para enviar o Schema.
  • Documente o que cada coluna significa.

5. Fluxo de Consulta MCP

graph LR
    A[LLM] -- "buscar_venda(123)" --> B[MCP Server]
    B -- "Parameterized SQL" --> C[(Banco de Dados)]
    C -- "Result Row" --> B
    B -- "JSON data" --> A

6. Recursos (Resources) para Relatórios

  • mcp://db/estatisticas/vendas_hoje.
  • Perfeito para dados de leitura rápida.

7. O Princípio do Privilégio Mínimo 🔐

  • Usuário do banco com permissões restritas.
  • NUNCA use o usuário root ou admin.

8. Monitoramento e Auditoria

  • Quem consultou o quê?
  • Logs detalhados de cada Tool de banco de dados.

9. Paginação e Limites de Tokens

  • Não envie 1 milhão de linhas para a IA.
  • Use LIMIT e OFFSET obrigatórios.

10. Resumo ✅

  • Segurança em primeiro lugar.
  • Use parâmetros, nunca concatene strings.
  • Documente o seu Schema para a IA.

11. Mini-Projeto: Consulta de Estoque

  • Implementar uma Tool de busca em um banco fictício.

12. Dúvidas? 🤔

"Dados são o novo petróleo, mas ferramentas inseguras são o fogo."