oracle-mcp-v1
Version:
Servidor MCP completo para Oracle Database com operações DDL, DML, DCL, monitoramento e auditoria
493 lines (419 loc) • 11 kB
Markdown
# Guia de Operações DDL, DML e DCL
Este guia apresenta as novas funcionalidades implementadas no Oracle MCP para operações de banco de dados, permitindo que usuários em geral executem operações DDL, DML e DCL de forma segura e controlada.
## Visão Geral
O projeto foi expandido para incluir:
- **DDL (Data Definition Language)**: Criação, alteração e remoção de estruturas de banco
- **DML (Data Manipulation Language)**: Consultas, inserções, atualizações e remoções de dados
- **DCL (Data Control Language)**: Gerenciamento de usuários, privilégios e roles
- **Auditoria e Segurança**: Logging completo e validações de segurança
## Funcionalidades DDL
### 1. Criação de Tabelas
```javascript
// Exemplo de uso via MCP
{
"name": "create_table",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"columns": [
{
"name": "ID",
"type": "NUMBER",
"notNull": true
},
{
"name": "NOME",
"type": "VARCHAR2",
"length": 100,
"notNull": true
},
{
"name": "PRECO",
"type": "NUMBER",
"precision": 10,
"scale": 2
},
{
"name": "ATIVO",
"type": "CHAR",
"length": 1,
"defaultValue": "'Y'"
}
],
"constraints": [
{
"name": "PK_PRODUTOS",
"type": "PRIMARY KEY",
"columns": ["ID"]
},
{
"name": "UK_PRODUTOS_NOME",
"type": "UNIQUE",
"columns": ["NOME"]
},
{
"name": "CK_PRODUTOS_PRECO",
"type": "CHECK",
"condition": "PRECO > 0"
}
],
"tablespace": "USERS",
"ifNotExists": true
}
}
```
### 2. Alteração de Tabelas
```javascript
// Adicionar coluna
{
"name": "alter_table",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"operation": "ADD_COLUMN",
"columnName": "DESCRICAO",
"columnType": "VARCHAR2",
"columnLength": 500
}
}
// Modificar coluna
{
"name": "alter_table",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"operation": "MODIFY_COLUMN",
"columnName": "NOME",
"columnType": "VARCHAR2",
"columnLength": 200,
"notNull": true
}
}
// Adicionar constraint
{
"name": "alter_table",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"operation": "ADD_CONSTRAINT",
"constraintName": "FK_PRODUTOS_CATEGORIA",
"constraintType": "FOREIGN KEY",
"constraintColumns": ["CATEGORIA_ID"],
"referencedTable": "CATEGORIAS",
"referencedColumns": ["ID"]
}
}
```
### 3. Remoção de Tabelas
```javascript
{
"name": "drop_table",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"ifExists": true,
"cascadeConstraints": false
}
}
```
## Funcionalidades DML
### 1. Consultas SELECT
```javascript
// Consulta simples
{
"name": "select_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"columns": ["ID", "NOME", "PRECO"],
"whereClause": "ATIVO = 'Y'",
"orderBy": "NOME",
"limit": 10
}
}
// Consulta com paginação
{
"name": "select_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"columns": ["*"],
"whereClause": "PRECO > 100",
"orderBy": "PRECO DESC",
"limit": 20,
"offset": 40
}
}
```
### 2. Inserção de Dados
```javascript
// Inserção com objeto de dados
{
"name": "insert_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"data": {
"ID": 1,
"NOME": "Produto Teste",
"PRECO": 99.99,
"ATIVO": "Y"
},
"returning": "ID"
}
}
// Inserção com arrays
{
"name": "insert_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"columns": ["ID", "NOME", "PRECO", "ATIVO"],
"values": [2, "Outro Produto", 149.99, "Y"]
}
}
```
### 3. Atualização de Dados
```javascript
{
"name": "update_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"data": {
"PRECO": 199.99,
"ATIVO": "N"
},
"whereClause": "ID = 1",
"returning": "NOME"
}
}
```
### 4. Remoção de Dados
```javascript
{
"name": "delete_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"whereClause": "ATIVO = 'N'",
"returning": "ID"
}
}
```
## Funcionalidades DCL
### 1. Criação de Usuários
```javascript
{
"name": "create_user",
"arguments": {
"username": "USUARIO_TESTE",
"password": "SenhaSegura123",
"defaultTablespace": "USERS",
"temporaryTablespace": "TEMP",
"quota": "100M",
"profile": "DEFAULT",
"ifNotExists": true
}
}
```
### 2. Concessão de Privilégios
```javascript
// Privilégios de objeto
{
"name": "grant_privileges",
"arguments": {
"privileges": ["SELECT", "INSERT", "UPDATE"],
"onObject": "HR.PRODUTOS",
"toUser": "USUARIO_TESTE",
"withGrantOption": false
}
}
// Privilégios de sistema
{
"name": "grant_privileges",
"arguments": {
"privileges": ["CREATE SESSION", "CREATE TABLE"],
"toUser": "USUARIO_TESTE",
"withAdminOption": false
}
}
```
### 3. Revogação de Privilégios
```javascript
{
"name": "revoke_privileges",
"arguments": {
"privileges": ["UPDATE", "DELETE"],
"onObject": "HR.PRODUTOS",
"fromUser": "USUARIO_TESTE",
"cascade": false
}
}
```
## Funcionalidades de Auditoria
### 1. Relatório de Auditoria
```javascript
{
"name": "generate_audit_report",
"arguments": {
"startDate": "2024-01-01T00:00:00Z",
"endDate": "2024-01-31T23:59:59Z",
"user": "USUARIO_TESTE",
"operation": "SELECT",
"success": true
}
}
```
### 2. Detecção de Atividades Suspeitas
```javascript
{
"name": "detect_suspicious_activity",
"arguments": {}
}
```
## Configurações de Segurança
### Variáveis de Ambiente
```bash
# Esquemas permitidos
ALLOWED_SCHEMAS=HR,SCOTT,USUARIO_TESTE
# Esquemas bloqueados
BLOCKED_SCHEMAS=SYS,SYSTEM
# Limite de linhas afetadas
MAX_ROWS_AFFECTED=10000
# Caminho do log de auditoria
AUDIT_LOG_PATH=./logs/audit.log
```
### Validações de Segurança
O sistema implementa várias camadas de segurança:
1. **Validação de SQL Injection**: Detecta tentativas de injeção SQL
2. **Validação de Esquemas**: Controla acesso a esquemas específicos
3. **Validação de Palavras-chave**: Bloqueia operações perigosas
4. **Validação de Entrada**: Sanitiza dados de entrada
5. **Logging de Auditoria**: Registra todas as operações
## Exemplos de Uso Prático
### Cenário 1: Criação de Sistema de Produtos
```javascript
// 1. Criar tabela de categorias
{
"name": "create_table",
"arguments": {
"tableName": "CATEGORIAS",
"schema": "HR",
"columns": [
{"name": "ID", "type": "NUMBER", "notNull": true},
{"name": "NOME", "type": "VARCHAR2", "length": 50, "notNull": true}
],
"constraints": [
{"name": "PK_CATEGORIAS", "type": "PRIMARY KEY", "columns": ["ID"]}
]
}
}
// 2. Criar tabela de produtos
{
"name": "create_table",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"columns": [
{"name": "ID", "type": "NUMBER", "notNull": true},
{"name": "NOME", "type": "VARCHAR2", "length": 100, "notNull": true},
{"name": "CATEGORIA_ID", "type": "NUMBER", "notNull": true},
{"name": "PRECO", "type": "NUMBER", "precision": 10, "scale": 2}
],
"constraints": [
{"name": "PK_PRODUTOS", "type": "PRIMARY KEY", "columns": ["ID"]},
{"name": "FK_PRODUTOS_CATEGORIA", "type": "FOREIGN KEY", "columns": ["CATEGORIA_ID"], "referencedTable": "CATEGORIAS", "referencedColumns": ["ID"]}
]
}
}
// 3. Inserir dados de exemplo
{
"name": "insert_data",
"arguments": {
"tableName": "CATEGORIAS",
"schema": "HR",
"data": {"ID": 1, "NOME": "Eletrônicos"}
}
}
// 4. Consultar produtos
{
"name": "select_data",
"arguments": {
"tableName": "PRODUTOS",
"schema": "HR",
"columns": ["P.ID", "P.NOME", "P.PRECO", "C.NOME"],
"whereClause": "P.CATEGORIA_ID = C.ID"
}
}
```
### Cenário 2: Gerenciamento de Usuários
```javascript
// 1. Criar usuário
{
"name": "create_user",
"arguments": {
"username": "VENDEDOR",
"password": "Venda123!",
"quota": "50M"
}
}
// 2. Conceder privilégios
{
"name": "grant_privileges",
"arguments": {
"privileges": ["SELECT", "INSERT", "UPDATE"],
"onObject": "HR.PRODUTOS",
"toUser": "VENDEDOR"
}
}
// 3. Verificar atividades
{
"name": "detect_suspicious_activity",
"arguments": {}
}
```
## Monitoramento e Logs
### Logs de Auditoria
Todos as operações são registradas em `./logs/audit.log` com informações:
- Timestamp da operação
- Usuário que executou
- Tipo de operação
- Recurso afetado
- Query executada (sanitizada)
- Resultado da operação
- Endereço IP e sessão
### Relatórios Disponíveis
1. **Relatório por Período**: Operações em um intervalo de tempo
2. **Relatório por Usuário**: Atividades de um usuário específico
3. **Relatório por Operação**: Estatísticas por tipo de operação
4. **Detecção de Anomalias**: Identificação de atividades suspeitas
## Boas Práticas
### 1. Segurança
- Sempre use cláusulas WHERE em operações de modificação
- Configure esquemas permitidos/bloqueados adequadamente
- Monitore logs de auditoria regularmente
- Use senhas fortes para usuários
### 2. Performance
- Use LIMIT em consultas grandes
- Crie índices apropriados
- Monitore o número de linhas afetadas
- Use paginação para grandes volumes de dados
### 3. Manutenção
- Execute relatórios de auditoria regularmente
- Monitore atividades suspeitas
- Mantenha logs organizados
- Revise permissões periodicamente
## Troubleshooting
### Erros Comuns
1. **"Esquema não permitido"**: Verifique configuração ALLOWED_SCHEMAS
2. **"Palavra-chave perigosa detectada"**: Operação não permitida para o tipo de query
3. **"Possível tentativa de SQL injection"**: Query contém padrões suspeitos
4. **"Cláusula WHERE é obrigatória"**: Operações de modificação requerem WHERE
### Logs de Debug
Verifique os logs em:
- `./logs/oracle-mcp.log`: Logs gerais do sistema
- `./logs/audit.log`: Logs de auditoria
- `./logs/error.log`: Logs de erro
## Conclusão
As novas funcionalidades DDL, DML e DCL transformam o Oracle MCP em uma ferramenta completa para gerenciamento de banco de dados Oracle, mantendo a segurança e proporcionando auditoria completa de todas as operações.