Aula 07 - Integração com Banco de Dados 💾
Conectando IAs ao Mundo dos Dados
Agenda de Hoje 📅
- Bancos Relacionais vs NoSQL
- Segurança no Acesso de Dados
- SQL Injection e Parametrização
- Expondo Schemas para a IA
- 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
rootouadmin.
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
LIMITeOFFSETobrigató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."