Module 6 — Database Manager

Gestionnaire de Connexions

Répertoire centralisé et sécurisé pour toutes vos bases de données — PostgreSQL, MySQL, Oracle. Chiffrement AES-256, monitoring en temps réel et introspection automatique du schéma.

Vue d'ensemble

Le Gestionnaire de Connexions est l'espace centralisé où vous connectez, gérez et surveillez toutes vos bases de données depuis une interface unique. Les identifiants ne transitent jamais en clair et sont chiffrés dès la saisie.

PostgreSQL
Supporté nativement — pg ^8.19
MySQL
mysql2 ^3.18 — MariaDB compatible
Oracle
oracledb ^6.10 — Oracle 12c+

Ajout d'une Connexion

1

Saisie des Informations

L'utilisateur renseigne : type (PostgreSQL/MySQL/Oracle), host, port, nom de la base, identifiants. Les credentials sont chiffrés AES-256 immédiatement à la saisie.
2

Test de Connexion en Direct

DIXX teste immédiatement la connexion via /api/database/ping et retourne la latence et la version du moteur.
3

Introspection du Schéma

Une fois connectée, DIXX lit automatiquement le schéma complet via /api/database/schemapour l'injection RAG dans le Smart Terminal.
4

Disponible dans Tous les Modules

La connexion devient disponible dans le Terminal IA, la Migration Sandbox, les Automatisations et les Insights.
typescript
// Route POST /api/connections
// Stocke la connexion avec credentials chiffrés AES-256
const connectionProfile = {
  name: "Production PostgreSQL",
  db_type: "postgres",      // "postgres" | "mysql" | "oracle"
  host: "db.example.com",
  port: 5432,
  database_name: "myapp_prod",
  user_name: "readonly_user",
  password_encrypted: encrypt(rawPassword), // AES-256 immédiat
  project_id: "uuid-du-projet",
};

// Test ping : /api/database/ping
// Résultat :
// { online: true, latency: 24, version: "PostgreSQL 15.2 on x86_64" }

Sécurité des Credentials

La sécurité des identifiants de connexion est la priorité absolue du module. Plusieurs couches de protection garantissent que vos credentials ne sont jamais exposés.

Isolation par Projet
Les profils de connexion sont strictement isolés par projet via Supabase RLS. Un membre d'un projet ne peut jamais voir les connexions d'un autre projet, même s'il utilise la même instance DIXX.
Chiffrement AES-256
Le mot de passe est chiffré avant d'être inséré en base. La clé de chiffrement est stockée dans les variables d'environnement serveur (ENCRYPTION_KEY).
Jamais en clair dans les logs
Les routes API masquent systématiquement les credentials dans les logs. Seuls l'host, le port et le database_name sont loggés.
Row Level Security
La table database_connections est protégée par des policies RLS Supabase qui vérifient l'appartenance au projet à chaque requête.
Découverte de schéma sécurisée
L'introspection du schéma utilise une connexion en lecture seule et ne retourne jamais la structure des données — uniquement les métadonnées (noms, types).

Introspection Automatique du Schéma

Dès qu'une connexion est active, DIXX lit automatiquement le schéma complet de la base via schema-extractor.ts. Ce schéma est injecté dans le contexte de l'IA (RAG) pour permettre des requêtes contextualisées.

typescript
// src/lib/schema-extractor.ts — Introspection PostgreSQL
// Lecture : tables, colonnes, types, clés étrangères, index
const schema = {
  tables: [
    {
      name: "customers",
      columns: [
        { name: "id",         type: "uuid",    nullable: false, primary: true },
        { name: "email",      type: "varchar", nullable: false, unique: true },
        { name: "created_at", type: "timestamp", nullable: false },
      ],
      foreign_keys: [],
      indexes: ["customers_email_idx", "customers_pkey"],
      row_count: 15420,
    },
    {
      name: "orders",
      columns: [/* ... */],
      foreign_keys: [{ column: "customer_id", references: "customers.id" }],
    }
  ],
  total_tables: 12,
  database_size_mb: 245.8,
};

// Ce schéma est injecté dans le contexte LLM :
// system: "Database schema: " + JSON.stringify(schema)

Métriques de Performance

La route /api/database/metrics collecte des indicateurs de performance pour chaque connexion active — temps de réponse moyen, charge, requêtes actives.

24ms
Latence
Temps ping
12 / 100
Connexions
Pool actif
En ligne
Statut
Disponibilité
PG 15.2
Version DB
Moteur détecté

Architecture des Connecteurs

Les connecteurs sont implémentés dans src/lib/db-connectors/ avec une interface commune abstraite pour PostgreSQL, MySQL et Oracle.

typescript
// src/lib/db-connectors/index.ts
export type DatabaseType = "postgres" | "mysql" | "oracle";

export class ConnectionFactory {
  static createConnector(config: {
    type: DatabaseType;
    host: string;
    port?: number;
    database: string;
    user: string;
    password: string;
  }): DatabaseConnector {
    switch (config.type) {
      case "postgres": return new PostgreSQLConnector(config);
      case "mysql":    return new MySQLConnector(config);
      case "oracle":   return new OracleConnector(config);
      default: throw new Error(`Unsupported database type: ${config.type}`);
    }
  }
}

// Interface commune pour tous les connecteurs
interface DatabaseConnector {
  query(sql: string, params?: unknown[]): Promise;
  disconnect(): Promise;
}