Net-Base Rivista

02.06.2026

Collegare MariaDB con Delphi e FireDAC: architettura, scelta del driver e gestione senza sorprese

Come collegare correttamente MariaDB da applicazioni Delphi tramite FireDAC: opzioni del driver, TLS, set di caratteri, transazioni, pooling, prestazioni e operatività – con focus su amministrazione, manutenzione e migrazione in sistemi consolidati.

02.06.2026

Dal tema della rivista alla pratica di progetto

Pagine di servizi e tecniche correlate all'articolo

Chi vuole collegare MariaDB con Delphi e BDE-sostituzione con connessione nativa, ha di solito in mente più di una «semplice» connessione riuscita. In contesti aziendali contano soprattutto la sicurezza operativa, una configurazione chiara, deployment riproducibili e un accesso ai dati che rimanga stabile anche sotto carico. MariaDB è spesso impiegata come alternativa economica e di facile amministrazione nell’ecosistema MySQL – e le applicazioni Delphi sono in molte aziende soluzioni consolidate e vicine ai processi, che devono funzionare in modo affidabile e vengono sviluppate ulteriormente per anni.

In questo contributo non si trattano pertanto dettagli di framework o codice dimostrativo, ma le decisioni che interessano davvero la direzione IT e l’amministrazione: quale strategia di driver è sensata (librerie client native vs ODBC), come evitare problemi di charset e collation, come pianificare correttamente TLS, quali aspetti di transazioni e locking sono rilevanti in MariaDB, e come mantenere controllabili nella routine quotidiana il monitoring, gli aggiornamenti e la ricerca degli errori. L’obiettivo è un’integrazione che non solo „funzioni“, ma che resti manutenibile e auditabile per l’intero ciclo di vita del software di business.

Collegare MariaDB con Delphi e FireDAC nella pratica

MariaDB deriva storicamente da MySQL ed è compatibile in molte aree, ma non è identica. Per l’esercizio operativo questo significa: molti strumenti, concetti e client driver funzionano in modo analogo, tuttavia esistono differenze nelle funzionalità, nei valori di default, nel comportamento dell’optimizer e talvolta nei tipi di dato o nelle variabili di sistema. Per Delphi/BDE-Ablosung mit nativer Anbindung questo è rilevante soprattutto nella domanda su quale percorso del driver venga utilizzato e quali assunzioni sul dialetto SQL siano incorporate nell’applicazione.

FireDAC è lo strato di accesso ai dati in Delphi che può collegare in modo uniforme molte banche dati. FireDAC incapsula la connessione, i parametri, le transazioni e il comportamento dei dataset. Importante nell’operatività aziendale: FireDAC non è solo „un driver“, ma uno strato che, a seconda del database, può usare modalità driver differenti. Per MariaDB nella pratica questo si traduce in due percorsi robusti: librerie client native MySQL/MariaDB o ODBC.

Strategia dei driver: libreria client nativa vs ODBC – cosa è meglio in esercizio?

La decisione più importante è se collegare FireDAC tramite una libreria client nativa (dall’ambito MySQL/MariaDB) o tramite un driver ODBC. Entrambi i percorsi sono tecnicamente validi, ma differiscono nel deployment, nei processi di aggiornamento e nei pattern di errore.

Libreria client nativa (libmysql / MariaDB Connector/C)

Nell’integrazione nativa FireDAC lavora con una libreria client che deve essere disponibile a runtime (tipicamente come DLL sotto Windows o come libreria condivisa sotto Linux). Nella pratica incontrerete due varianti:

  • MySQL-Client-Library: ampiamente diffusa, ma dipendente dalle versioni e dalle modalità di distribuzione.
  • MariaDB Connector/C: spesso più coerente per server MariaDB, con un proprio ciclo di rilascio.

Dal punto di vista operativo: le librerie native offrono in genere le migliori prestazioni e la diagnostica d’errore più diretta (handshake, TLS, autenticazione). Il prezzo è un componente di deployment aggiuntivo: la versione corretta della library deve essere presente su tutti i sistemi target e non deve essere sovrascritta „per caso“ da altro software.

ODBC (MariaDB ODBC Driver)

ODBC (Open Database Connectivity) è un concetto di driver standardizzato a livello di sistema operativo. FireDAC può interfacciarsi con MariaDB tramite ODBC, se è installato un driver ODBC appropriato. Questo appare a prima vista „conveniente per l’amministrazione“, perché ODBC è già diffuso in molte aziende (p. es. per strumenti di reporting).

Dal punto di vista operativo: ODBC può semplificare il deployment se già distribuite un pacchetto di driver standardizzato tramite software di distribuzione. Tuttavia si introducono ulteriori livelli di astrazione: i messaggi di errore possono essere talvolta meno precisi e gli aggiornamenti dei driver devono essere controllati con attenzione, poiché possono influire anche su altre applicazioni.

Criteri decisionali per le aziende

  • Controllo del rollout: fornire la libreria nativa con ogni applicazione è spesso più pulito rispetto a modifiche ODBC a livello di sistema.
  • Gestione delle modifiche: ODBC è adatto se le versioni dei driver sono gestite centralmente e adeguatamente testate.
  • Diagnosi degli errori: i percorsi nativi sono spesso più diretti da debugare (handshake/TLS/auth).
  • Compatibilità: per plugin di autenticazione e policy TLS il driver specifico può essere determinante.

In molti ambienti aziendali stabili si preferisce, per applicazioni desktop o di servizio in produzione, utilizzare la libreria nativa (versionata e distribuita con l’applicazione) e impiegare ODBC soprattutto dove si collegano strumenti di terze parti.

Definire correttamente i parametri di connessione: Host, Porta, Timeout, Failover

Un errore comune in applicazioni cresciute nel tempo è una configurazione „collegata in modo approssimativo“. Per esercizio e manutenzione serve una definizione chiara e tracciabile dei parametri di connessione — per ogni ambiente (sviluppo, test, produzione) — senza incorporazioni rigide nei file di programma.

Parametri importanti dal punto di vista operativo:

  • Host/Porta: lo standard è 3306, ma in reti segmentate sono comuni porte diverse.
  • Connect Timeout: protegge da tentativi di connessione „bloccati“ in caso di problemi di routing o DNS.
  • Read/Write Timeout: evita che singole richieste blocchino il processo in caso di problemi di rete.
  • Keepalive: utile in fasi di inattività prolungata, specialmente su tratte WAN/VPN.
  • Strategia di failover: in presenza di replica/cluster è necessario definire come i client devono commutare (o se non devono farlo automaticamente).

Regola pratica: i timeout non sono un „nice-to-have“, ma parte della sicurezza operativa. Senza timeout chiari singoli client o servizi possono occupare risorse causando effetti a catena (p. es. i pool di thread si saturano, l’interfaccia non risponde, i job si accumulano).

TLS e certificati: la cifratura è un progetto operativo, non una casella da spuntare

In ambienti moderni TLS (Transport Layer Security, ovvero cifratura sul livello di trasporto) non è opzionale. È fondamentale che TLS non sia solo „attivato“, ma correttamente validato: verificare il certificato server, controllare la catena CA, assicurare la verifica del nome host ed escludere protocolli obsoleti.

Tipici punti critici con Delphi/FireDAC in ambiente aziendale:

  • Percorso del certificato e autorizzazioni: i servizi spesso girano sotto account dedicati; lì i file CA/archivi dei certificati devono essere accessibili.
  • Hostname vs. CN/SAN del certificato: se i client si connettono tramite nomi alias (DNS-CNAME, VIP), il certificato deve coprire questi nomi.
  • Certificati intermedi: Catene incomplete funzionano in alcuni strumenti, ma falliscono in altri ambienti.
  • „Cifrato, ma non verificato“: Una soluzione alternativa comune a un anti-pattern è disattivare la verifica. Questo rappresenta un rischio operativo e va evitato.
  • Per i responsabili IT è importante: definite chi distribuisce i certificati, come funziona il rinnovo e come monitorate la validità. La crittografia non è un tema esclusivamente applicativo, riguarda i processi PKI (Public Key Infrastructure) e le finestre di change.

    Set di caratteri, collations e „umlaute rotti“: evitare sistematicamente le cause

    Un classico nelle migrazioni di database e nelle nuove integrazioni sono caratteri speciali errati o ordinamenti „strani“. La causa quasi mai è „Delphi non sa fare UTF-8“, ma piuttosto un mix di default del set di caratteri, definizioni di tabelle/colonne e handshake del client.

    Su cosa dovete vigilare:

    • Default del server vs. definizione dello schema: Non fate affidamento sui default globali. Definite esplicitamente set di caratteri e collation a livello di database e tabelle.
    • Variante UTF-8: In ambienti MariaDB/MySQL la scelta robusta è utf8mb4 (Unicode completo inclusi i caratteri a 4 byte). Il più vecchio „utf8“ non copre tutto.
    • Handshake del client: Il driver deve sapere in quale encoding invia/riceve. Se client e server contrattano diversamente, si generano errori silenziosi nei dati.
    • Ordinamento (Collation): La collation influisce su confronti e ORDER BY. Con dati multilingue o misti è necessaria una decisione consapevole.

    In esercizio conta meno la „collation corretta“ teorica e più la conseguenza pratica: stabilire una volta, documentare e controllare con query di verifica durante le migrazioni. Soprattutto nelle applicazioni aziendali vicine ai processi, variazioni nell’ordinamento emergono tardi (es. in elenchi, export o logiche di duplicati).

    Autenticazione e diritti utente: privilegi minimi, ruoli chiari

    MariaDB offre meccanismi di autenticazione diversi (basati su password, talvolta tramite plugin). Per le applicazioni è fondamentale usare un accesso DB dedicato e allineare i permessi strettamente al bisogno. „Privilegi DBA per l’applicazione“ è un rischio inutile.

    Prassi raccomandata in contesti aziendali:

    • Utenti separati per applicazione/service (e, se necessario, per tenant/ambiente).
    • Principio del minimo privilegio: solo SELECT/INSERT/UPDATE/DELETE sugli oggetti necessari, nessun permesso globale.
    • Assenza di permessi DDL dinamici (CREATE/ALTER) nelle applicazioni di produzione, salvo che facciano parte di un processo di migrazione controllato.
    • Rotazione delle password con una gestione pianificata della sostituzione (es. accessi paralleli validi per brevi finestre di transizione).

    Se l’applicazione esegue job in background (import, interfacce, batch), spesso è sensato usare account separati anche per questi processi. Questo migliora l’auditabilità e limita l’impatto in caso di credenziali compromesse.

    Transazioni, isolamento e locking: rendere pianificabile invece di „il database è a volte lento“

    In molte applicazioni in esercizio basate su Delphi le modifiche ai dati sono cresciute storicamente: singoli aggiornamenti senza confini transazionali chiari, assunzioni „ottimistiche“ o lock troppo ampi. MariaDB si comporta diversamente a seconda della storage engine; nella pratica InnoDB è quasi sempre la scelta (transazioni, row-level locks, crash-recovery).

    Per responsabili IT e di progetto sono decisivi i seguenti punti:

    • Confini di transazione: Un’operazione di dominio (ad es. registrare un ordine) dovrebbe avere una transazione definita. Confini poco chiari generano stati intermedi difficili da riprodurre.
    • Livello di isolamento: Determina quali ’stati intermedi‘ sono visibili. Un isolamento troppo alto può aumentare lock e tempi di attesa, un isolamento troppo basso può produrre risultati errati dal punto di vista funzionale.
    • Locking/Deadlock: I deadlock non sono un «bug del database», ma un’indicazione di percorsi di accesso concorrenti. È importante che l’applicazione li rilevi, li registri in modo chiaro e tenti nuovamente in modo controllato (retry) — ma con limiti.
    • Transazioni lunghe: Transazioni aperte dovute a interazioni UI o processi lunghi sono una causa comune di problemi di lock e di performance.

    Nella pratica: transazioni brevi, ordine chiaro negli update (per ridurre i deadlock) e un logging che, in caso di errore, renda tracciabili le operazioni SQL interessate e i dati di contesto, senza registrare dati sensibili in chiaro.

    Prestazioni: indici, parametri, roundtrip e tipiche trappole FireDAC

    Se dopo la migrazione a MariaDB «tutto sembra un po‘ più lento», raramente è colpa di MariaDB come prodotto, ma di una combinazione di progettazione delle query, indicizzazione e comportamento del client. FireDAC offre molte leve di regolazione – la sfida è mantenerle gestibili in esercizio.

    Verificare indici e realtà delle query

    Per l’amministrazione è cruciale identificare le query più importanti e valutarle con i piani Explain. Cause tipiche di carico inatteso:

    • indici composti mancanti o errati (indici multi-colonna coerenti con l’uso in WHERE/ORDER BY)
    • ricerche LIKE senza strategia adeguata (p. es. prefisso vs. fulltext)
    • funzioni sulle colonne nelle clausole WHERE (l’indice non viene utilizzato)
    • forte variabilità nei valori dei parametri (la scelta del piano varia)

    Questo è meno «ottimizzazione da sviluppatore» e più disciplina operativa: verificare regolarmente le query principali, controllare regressioni dopo i rilasci e allineare la logica SQL ai requisiti di dominio.

    Ridurre i roundtrip e scegliere consapevolmente il comportamento di fetch

    Roundtrip significa: un ciclo request/response tra applicazione e database. Molti piccoli roundtrip sono spesso impercettibili su LAN, ma costosi su VPN o con alta parallelità. FireDAC può prelevare i dati a blocchi (opzioni di fetch) e offre operazioni batch/array. È importante non impostare queste opzioni in modo ‚globale‘ e aggressivo, ma decidere per caso d’uso (liste, moduli di dettaglio, esportazione, job di interfaccia).

    Parametrizzazione invece di SQL in stringa

    Le query parametrizzate aiutano non solo contro le SQL injection, ma migliorano anche il caching dei piani e riducono problemi di encoding. Per l’esercizio ciò significa: meno ‚casi speciali‘, meno errori difficili da spiegare con caratteri particolari e maggiore stabilità nelle query ricorrenti.

    Connection pooling e parallelità: desktop, service, terminal server

    In ambienti aziendali il pattern d’uso è decisivo: un singolo client desktop è diverso da 50 utenti paralleli su terminal server o da un Windows-/Windows- e Linux-servizi che elabora job in background. ‚Troppe connessioni‘ non porta solo a limiti, ma anche a carico inutile dovuto agli handshake e alla memoria.

    Considerazioni importanti:

    • Per processo vs. per thread: FireDAC-connessioni sono risorse; pianificate quante operazioni DB parallele sono effettivamente necessarie.
    • Pooling: un pool riduce l’overhead di connessione, ma richiede una pulizia accurata (terminare le transazioni, ripristinare le impostazioni di sessione).
    • Stato della sessione: se impostate variabili per sessione (ad es. SQL_MODE, fuso orario), devono essere coerenti nel contesto del pool.
    • Terminalserver: molti utenti condividono lo stesso server, ma non lo stesso processo. Questo influisce su come il numero di connessioni scala.

    Dal punto di vista operativo dovrebbe esserci un obiettivo chiaro: quante connessioni attive sono accettabili nei picchi, quali limiti sono applicati lato DB e come si comporta l’applicazione sotto carico (Backpressure invece di „tutto contemporaneamente“).

    Errori pratici: cosa intercettare precocemente

    Molti problemi non emergono nei test degli sviluppatori, ma nell’interazione tra rete, permessi, aggiornamenti e contenuto dei dati. Classi di errore tipiche:

    • „Can’t connect“: DNS, firewall, porta errata, rotte mancanti, timeout di connessione troppo brevi.
    • TLS-Handshake fallisce: certificati scaduti, CA errata, hostname non corrisponde, politica di protocollo troppo rigida/troppo permissiva.
    • „Access denied“: permessi non allineati alle maschere host (utente@Host), rotazione password senza rollout coordinati.
    • Problemi di encoding: charset predefinito non coerente, dati misti da importazioni legacy.
    • Deadlocks/Lock waits: transazioni lunghe, ordini di aggiornamento diversi, indici mancanti sulle colonne FK.

    Raccomandazione: definite per ogni classe di errore una checklist diagnostica (quali log, quali valori di stato DB, quali controlli di rete). Questo riduce significativamente l’MTTR (Mean Time to Repair), evitando di «cercare nel buio» in caso di incidente.

    Migrazioni e funzionamento misto: da MySQL o sistemi legacy a MariaDB

    Nei progetti il collegamento a MariaDB spesso nasce nel contesto di una modernizzazione: le versioni MySQL non sono più supportate, un server database deve essere consolidato o un’applicazione viene estratta da un accesso dati legacy (p.es. BDE). Tecnicalmente questi passaggi sono realizzabili – i rischi risiedono nei dettagli.

    Punti importanti per un percorso sicuro:

    • Verificare i tipi di dato: in particolare data/ora, scale DECIMAL, colonne di testo, logica NULL/default.
    • Dialetto SQL e funzioni: piccole differenze nelle funzioni o nelle impostazioni di strict-mode possono modificare la logica applicativa.
    • Stored Procedures/Views: se utilizzate, compatibilità e processo di deployment devono essere definiti chiaramente.
    • Fusi orari: fuso orario server e sessione influenzano il comportamento di TIMESTAMP/DATETIME; per audit e interfacce la coerenza è centrale.
    • Piano di cutover: sincronizzazione dei dati, finestre di freeze, opzione di rollback e monitoraggio nei primi giorni.

    Soprattutto per soluzioni software vicine ai processi, un «Big Bang» è raramente necessario. Spesso ha senso un approccio graduale: prima abilitare driver e configurazioni, poi verificare il modello dati e le query, quindi migrare i moduli passo dopo passo. Questi contenuti si possono ben integrare con temi di modernizzazione interni, ad esempio quando una Delphi Modernizzazione o una BDE-Sostituzione è in corso in parallelo.

    Monitoring, logging e manutenzione: cosa si aspettano il team operativo e la revisione

    Quando un’applicazione Delphi accede in produzione a MariaDB, il collegamento al database non dovrebbe essere «invisibile». Per l’amministrazione e la compliance sono importanti tracciabilità e una superficie d’attacco minima.

    Cosa tenere sotto controllo lato database

    • Numero di connessioni e picchi: correlati a cambi di release, carico dei terminal server o finestre temporali dei job.
    • Slow Query Log: indica dove si perde tempo reale (non solo CPU, anche lock).
    • Tempi di attesa dei lock: indicazioni su operazioni concorrenti e indici mancanti.
    • Stato della replica (se utilizzata): i ritardi sono rilevanti per le analisi e il failover.

    Cosa dovrebbe fornire l’applicazione

    • ID di correlazione: per poter assegnare errori DB a un processo funzionale.
    • Logging tecnico con contesto SQL (quale caso d’uso, quale classe di query), ma senza contenuti sensibili in chiaro.
    • Trasparenza della configurazione: quale versione del driver, quale policy TLS, quale indirizzo del server – decisivo per i casi di supporto.

    L’obiettivo non è «più log», ma log utile: rapidamente delimitabile, conforme alla protezione dei dati e sfruttabile dal supporto di 2° livello.

    Sicurezza e hardening: misure pratiche che nei progetti Delphi spesso mancano

    Un collegamento stabile significa anche: nessuna superficie d’attacco non necessaria. Oltre a TLS e permessi minimi, sono rilevanti i seguenti punti:

    • Gestione dei segreti: le password non devono essere in file di configurazione in chiaro senza protezione. In Windows-ambienti DPAPI/Protected Storage può aiutare; su Linux sono consueti permessi file RESTrittivi e store per i segreti.
    • Protezione da SQL injection: parametrizzare in modo coerente, anche nelle maschere di ricerca e nei filtri dinamici.
    • Processo di patching: driver e librerie client fanno parte della superficie d’attacco. Versionamento e rollout sono importanti quanto le patch dei server.
    • Segmentazione di rete: i server DB non devono essere raggiungibili «per tutto», ma solo dalle subnet degli application server/clients.

    Per i decisori è rilevante: la sicurezza nasce meno da soluzioni isolate e più da un processo ripetibile (testare le modifiche, distribuirle in modo controllato, monitorarle).

    Lista di controllo: come rendere la connessione a MariaDB con FireDAC manutenibile a lungo termine

    La seguente checklist è formulata intenzionalmente in modo operativo ed è adatta come base per l’accettazione del progetto o la documentazione operativa:

    1. Percorso del driver definito (libreria nativa o ODBC) incl. strategia di versionamento e aggiornamento.
    2. Configurazione esternalizzata (ambienti separati, niente hardcode, default documentati).
    3. TLS implementato correttamente (verifica attiva, catena di certificati completa, processo di rinnovo definito).
    4. Strategia di set di caratteri (utf8mb4, collations documentate, migrazione verificata).
    5. Ruoli e permessi DB (principio del minimo privilegio, account separati, rotazione pianificabile).
    6. Progettazione delle transazioni (confini chiari, durate brevi, gestione dei deadlock definita).
    7. Monitoring/Logging (slow queries, lock-wait, ID di correlazione, conformità alla protezione dei dati).
    8. Modello di carico e di connessione (pooling, parallelismo, limiti, scenari terminal server/service).

    Conclusione: «Funziona» non è sufficiente – un buon collegamento è una decisione operativa

    MariaDB può essere integrata in modo affidabile con Delphi e FireDAC se l’integrazione è considerata parte dell’architettura complessiva: scelta del driver, TLS, set di caratteri, autorizzazioni, transazioni e monitoraggio devono essere coerenti. Chi decide e documenta questi aspetti per tempo e in modo accurato riduce sensibilmente le sorprese operative successive – in particolare nelle applicazioni aziendali consolidate e vicine ai processi, in cui stabilità e manutenibilità sono più importanti delle soluzioni temporanee.

    Se desiderate strutturare la vostra connessione a MariaDB nell’ambito di una modernizzazione, di una BDE-sostituzione o di una consolidazione degli accessi ai dati, parlate con noi dei vostri vincoli e del percorso di migrazione più sensato:

    Anche nell’ambito funzionale rivestono un ruolo importante la connessione FireDAC a MariaDB e la connessione Delphi a MariaDB, quando integrazioni, flussi di dati e sviluppo devono interagire in modo coerente.

    Discutere il progetto o l’intervento di modernizzazione con Net-Base.

    Passo successivo

    Quando un tema diventa un progetto reale, architettura, sistemi esistenti e gestione operativa dovrebbero essere considerati insieme fin dall'inizio.

    Non forniamo solo supporto per questioni isolate, ma anche quando da frammenti di codice sorgente, tematiche legacy o idee di portale deve nascere un progetto aziendale solido.

    • Stato attuale, stato obiettivo e rischi tecnici vengono valutati insieme.
    • REST, l'accesso ai dati, i portali e il rollout non vengono rimandati a fasi successive.
    • Vede in anticipo quale percorso è economicamente ed operativamente sostenibile.

    Condividi il post

    Condividi direttamente questo articolo

    LinkedIn, X, XING, Facebook, WhatsApp e e-mail sono immediatamente disponibili. Per Instagram prepariamo direttamente il link e un breve testo.

    E-mail

    Instagram si apre in una nuova scheda. Il link e il breve testo vengono copiati prima negli appunti.