Stringa di connessione JDBC per Oracle: formati ed esempi
|
7
min di lettura

Alle 2 di notte un'applicazione può essere perfettamente sana a livello di codice e rifiutare comunque ogni connessione al database. Il pool segnala un URL malformato, il listener rifiuta un servizio, oppure una connessione TLS raggiunge il server e fallisce prima che parta la prima query. In ognuno di questi casi, la stringa di connessione JDBC per Oracle fa parte della configurazione di runtime, non è un innocuo campo di testo.
La difficoltà pratica è che Oracle supporta diversi stili di connessione. La vecchia sintassi con SID compare ancora in produzione, i service name sono la scelta normale per i deployment moderni, gli alias TNS spostano la risoluzione nella configurazione del client e l'attuale sintassi del driver Thin può esprimere più host, failover, bilanciamento del carico e proprietà di sicurezza. Il formato giusto dipende dall'architettura del database e dall'ambiente in cui gira l'applicazione.
Indice
Perché la stringa di connessione conta in Oracle JDBC
Trattate l'URL come configurazione, non come decorazione
Struttura generale di un URL JDBC per Oracle
Le parti di un URL JDBC per Oracle
Formato SID e formato service name a confronto
URL con SID e URL con service name
Inserire credenziali e proprietà di connessione
Scegliete in modo consapevole il confine della configurazione
Usare un alias TNS al posto di Easy Connect
Verificate la risoluzione dell'alias prima di fare debugging su Java
Easy Connect Plus per più host e RAC
Campi del descriptor che cambiano il comportamento
Stringhe di connessione SSL e TCPS
Configurazione di wallet e certificati
Casi limite in produzione che rompono URL validi
Quattro guasti da testare prima del deployment
Casi limite e forma dell'URL funzionante
Errori comuni di Oracle JDBC e relative correzioni
Riferimento rapido per le stringhe di connessione JDBC per Oracle
Perché la stringa di connessione conta in Oracle JDBC
Alle 2 di notte un'applicazione può essere sana mentre ogni connessione Oracle fallisce. Il driver può rifiutare un URL malformato, un listener può rifiutare il servizio richiesto, oppure un handshake TCPS può interrompersi prima che Java crei una Connection. La stringa di connessione JDBC per Oracle è configurazione di runtime, non testo decorativo.
Prima di aprire una connessione, il driver analizza l'URL per determinare il tipo di driver, la destinazione, il metodo di naming, il protocollo e il comportamento opzionale. La sua sintassi supporta pattern del driver Thin come jdbc:oracle:thin:@//<host>:<port>/<service>, accanto alle forme con SID, alias TNS, connect descriptor completo ed Easy Connect Plus. Una barra, due punti, un alias o un parametro di sicurezza possono quindi cambiare il target di database che il driver tenta di risolvere.
Anche una credenziale che contiene @, / o ? può essere interpretata come sintassi dell'URL anziché come parte della password. Questi guasti si verificano prima che SQL, permessi sugli schemi o dimensionamento del pool diventino rilevanti.
Trattate l'URL come configurazione, non come decorazione
La stringa controlla:
Raggiungibilità, tramite host, porta, protocollo e metodo di naming.
Selezione del database, tramite SID, service name, alias TNS o connect descriptor.
Resilienza, tramite più host, comportamento di retry, failover e opzioni di bilanciamento del carico.
Sicurezza, tramite TCPS, wallet, validazione dei certificati e proprietà di connessione crittografata.
Coerenza operativa, perché un URL che funziona su un portatile può fallire in un container con DNS, file di wallet o configurazione del client Oracle diversi.
Regola pratica: validate l'URL indipendentemente dal codice applicativo. Se il driver non riesce ad analizzarlo o a risolverlo, modificare la dimensione del pool o la logica di retry non correggerà il problema di connessione.
Scegliete il formato tenendo conto delle dipendenze di deployment. Easy Connect mantiene i dettagli di host e servizio nella configurazione dell'applicazione. Un alias TNS sposta questi dettagli in tnsnames.ora, il che può semplificare l'amministrazione centralizzata ma crea una dipendenza dalla localizzazione del file. Easy Connect Plus e gli URL multi-host in stile RAC aggiungono il comportamento di failover, mentre TCPS introduce requisiti su wallet e certificati. Sia la topologia del database sia la configurazione disponibile nel runtime devono essere compatibili con la stringa scelta.
Struttura generale di un URL JDBC per Oracle
La maggior parte degli URL del driver Thin si può leggere come un unico template:
jdbc:oracle:thin:@<connect_info>
È nella parte <connect_info> che i formati divergono. Un URL Easy Connect con service name usa //host:port/service, mentre la vecchia forma con SID usa host:port:SID. Un URL basato su TNS usa un alias o un connect descriptor completo invece di una coppia diretta host e servizio. La documentazione attuale di Oracle descrive anche proprietà opzionali e forme multi-host più ricche, quindi gli esempi semplici sono punti di partenza e non l'intera grammatica.
Per esempio:
jdbc:oracle:thin:@//dbhost.example.com:1521/ORCLPDB1jdbc:oracle:thin:@dbhost:1521:ORCLjdbc:oracle:thin:@PROD_ALIAS
I primi caratteri dopo @ contano. La forma // identifica la sintassi Easy Connect. Un descriptor tra parentesi viene analizzato come connect descriptor, mentre un alias richiede che il driver risolva una voce di naming. Questa scelta del parser spiega perché sostituire soltanto i due punti con una barra possa cambiare in modo significativo il risultato.
Le parti di un URL JDBC per Oracle
Segmento | Esempio | Scopo |
|---|---|---|
Prefisso del driver |
| Seleziona il driver Oracle JDBC Thin |
Marcatore di connessione |
| Separa la parte del driver dai dati di destinazione |
Host |
| Identifica l'host del database o l'indirizzo del listener |
Porta |
| Identifica la porta del listener |
Identificatore del database |
| Seleziona un SID o un servizio, a seconda della sintassi |
Alias o descriptor |
| Delega la risoluzione alla configurazione di naming di Oracle |
Proprietà |
| Aggiunge impostazioni di connessione e di resilienza |
Un utile complemento per documentare le dipendenze è questa guida su come referenziare un database. Rafforza un'importante abitudine operativa: annotate che cosa identifica ciascun campo di connessione, invece di copiare un URL la cui semantica nessuno nel team sa spiegare.
Formato SID e formato service name a confronto
Le due forme Easy Connect più note di Oracle sembrano simili, ma identificano target diversi:
Forma con SID:
jdbc:oracle:thin:@host:1521:ORCLForma con service name:
jdbc:oracle:thin:@//host:1521/ORCLPDB1
La forma con SID usa i due punti tra la porta e l'identificatore. Indirizza un'istanza Oracle tramite il suo System Identifier e resta rilevante per gli ambienti più datati o per una connessione che si aspetta esplicitamente un SID. La forma con service name usa // seguito da una barra prima del servizio. Chiede al listener un servizio registrato, che è il modello appropriato per molti deployment attuali, incluse le connessioni a pluggable database.
La FAQ JDBC di Oracle descrive il passaggio dal pattern legacy jdbc:oracle:thin:@[HOST][:PORT]:SID alla forma con service name, jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE. Lo stesso riferimento documenta anche il supporto di TNSNames nella release 10.2.0.1 del driver e le attuali funzionalità multi-host. La storia della sintassi conta perché molte applicazioni hanno ereditato URL da layout di database più vecchi e non hanno mai rivisto la scelta del naming.
URL con SID e URL con service name
Aspetto | Forma con SID | Forma con service name |
|---|---|---|
Esempio |
|
|
Separatore | Due punti prima dell'identificatore | Barra prima del servizio |
Target | Un'istanza Oracle identificata dal SID | Un servizio registrato sul listener |
Caso d'uso ideale | Ambienti legacy o esplicitamente basati su SID | Servizi, PDB, rilocazione e deployment in cluster |
Errore comune | Usare un SID dove è registrato solo un servizio | Omettere |
Non scegliete in base a quale URL vi sembra più familiare. Chiedete al DBA l'esatto service name registrato o il SID e verificate se il target è un non-CDB, un PDB o un servizio che può spostarsi tra istanze. Se il database usa i servizi per la gestione dei carichi di lavoro o per la rilocazione nel cluster, la forma con service name è la base più sicura.
Inserire credenziali e proprietà di connessione
Le credenziali possono comparire nell'URL, ma non è obbligatorio. Un pattern con credenziali potrebbe avere questo aspetto:
jdbc:oracle:thin:username/password@//dbhost:1521/ORCLPDB1
Per gli esempi statici questa sintassi è facile da leggere. In un'applicazione crea due rischi. Primo, la password può finire nel controllo di versione, nei log, nei messaggi di eccezione o nella diagnostica del pool. Secondo, i caratteri riservati possono cambiare il modo in cui il driver identifica username, password e destinazione.
Scegliete in modo consapevole il confine della configurazione
Usate un oggetto Properties o un data source quando le credenziali sono dinamiche o gestite da un secret store. Per esempio, l'applicazione può mantenere l'URL concentrato sui dati di destinazione e fornire utente e password separatamente tramite l'API di connessione JDBC o OracleDataSource. Questa separazione facilita la rotazione e riduce le esposizioni accidentali.
Le proprietà nell'URL possono esprimere anche comportamenti avanzati. Il riferimento JDBC attuale di Oracle indica che i service name in stile Thin e le proprietà di connessione opzionali supportano tuning e failover. I nomi esatti delle proprietà e la loro posizione ammessa dipendono dalla sintassi del driver, quindi verificateli rispetto alla versione del driver invece di dare per scontato che le proprietà di un'altra configurazione client Oracle funzionino senza modifiche.
Tenete a mente questi rischi di parsing:
Chiocciole: una
@in una password può essere scambiata per il delimitatore prima dell'host.Punti interrogativi: un
?può aprire una sezione di proprietà invece di restare parte della password.Barre: una
/può confondere il confine tra le credenziali e la destinazione Easy Connect.Punti e virgola: i valori che contengono punti e virgola possono richiedere le virgolette doppie nella sintassi del descriptor basata su proprietà.
Virgole: le virgole non codificate possono essere interpretate come separatori in un'espressione multi-indirizzo o di failover.
Anche le credenziali meritano la stessa governance degli altri dati di connessione sensibili. I team che documentano i requisiti di data residency dovrebbero registrare dove si trovano i file di wallet, i secret provider e la configurazione delle connessioni, non solo dove gira il server del database.
Usare un alias TNS al posto di Easy Connect
Un alias TNS cambia la titolarità dei dettagli di connessione. Invece di inserire host, porta e servizio nell'URL dell'applicazione, l'applicazione fa riferimento a una voce mantenuta in tnsnames.ora:
jdbc:oracle:thin:@PROD_ALIAS
L'alias può rappresentare un connect descriptor più articolato di una stringa Easy Connect. Questo lo rende utile quando gli amministratori di database gestiscono già i file di naming, quando più applicazioni condividono la stessa definizione di destinazione o quando l'organizzazione vuole modificare i dettagli del listener senza toccare ogni manifest di deployment.
Il compromesso è la dipendenza dall'ambiente. Il driver Thin deve trovare il tnsnames.ora corretto. Impostate la system property TNS_ADMIN o l'argomento JVM oracle.net.tns_admin sulla directory che contiene il file, oppure fornite il file tramite il percorso di configurazione Oracle previsto dal runtime. Un URL che funziona sulla workstation di uno sviluppatore può fallire in un container perché il file degli alias non è mai stato copiato nell'immagine.
Verificate la risoluzione dell'alias prima di fare debugging su Java
Gli alias con punti meritano un'attenzione particolare. Un alias come PROD.EXAMPLE.COM può essere interpretato come notazione puntata anziché come nome di lookup TNS, il che può produrre un errore Invalid connection string format. Il supporto Oracle e le discussioni della community sul troubleshooting, inclusa questa discussione sul formato della stringa di connessione Oracle JDBC, mostrano perché un alias sintatticamente plausibile possa comunque fallire in fase di risoluzione.
Quando il nome è ambiguo, usate una forma esplicita con description list oppure configurate il percorso dell'alias in modo univoco. Anche la proprietà di connessione TNS_ENTRY può rendere esplicito il lookup previsto. Il naming basato su LDAP aggiunge un ulteriore livello. Il comportamento del driver Thin non riproduce automaticamente ogni regola di naming di sqlnet.ora, e la risoluzione LDAP può richiedere l'impostazione di oracle.net.ldap.enabled.
Usate TNS quando il naming centralizzato è un reale requisito operativo. Usate Easy Connect quando una configurazione di deployment autosufficiente conta più di un naming condiviso lato client.
Easy Connect Plus per più host e RAC
L'Easy Connect di base è conciso, ma i deployment Oracle in cluster richiedono spesso più indirizzi di listener. Easy Connect Plus supporta più host, porte opzionali, proprietà di connessione e comportamenti orientati a RAC in un unico URL. Una forma in stile descriptor rende esplicita ogni impostazione:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=scan-a.example.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=scan-b.example.com)(PORT=1521)))(LOAD_BALANCE=on)(FAILOVER=on)(CONNECT_DATA=(SERVICE_NAME=APP_SERVICE)))
L'URL elenca due endpoint di listener e abilita tra di essi il bilanciamento lato client e il failover. SERVICE_NAME resta il target logico del database. In RAC, le applicazioni dovrebbero richiedere il servizio registrato invece di vincolarsi a una singola istanza. Puntare a un'istanza specifica può vanificare il posizionamento dei servizi e lasciare l'applicazione legata a un nodo non disponibile o sovraccarico.
Campi del descriptor che cambiano il comportamento
Campo | Scopo | Valore tipico |
|---|---|---|
| Contiene più indirizzi di listener | Più blocchi |
| Indica un endpoint di indirizzo | Un nome host in stile SCAN |
| Seleziona la porta del listener | La porta configurata sul listener |
| Seleziona il trasporto |
|
| Abilita il bilanciamento degli indirizzi lato client |
|
| Consente un altro indirizzo dopo un errore |
|
| Seleziona il servizio di database registrato |
|
| Limita il tempo di instaurazione della connessione | Un timeout approvato per l'ambiente |
| Controlla i tentativi di riconnessione | Un numero approvato per l'ambiente |
| Controlla la modalità di attraversamento degli indirizzi | Abilitato quando il percorso lo richiede |
Una forma Easy Connect Plus più breve può essere più facile da mantenere:
jdbc:oracle:thin:@//scan.example.com:1521/APP_SERVICE?LOAD_BALANCE=on&FAILOVER=on
Usate il descriptor quando vi servono blocchi di indirizzi separati, la selezione del protocollo o controlli di routing. Usate la forma compatta solo dopo aver testato la versione del driver e l'ambiente Oracle con le proprietà richieste. Un URL può essere analizzato correttamente anche se un listener, la registrazione di un servizio o una proprietà restano incompatibili.
I container ne traggono vantaggio perché la topologia resta nella configurazione di deployment invece di dipendere da un tnsnames.ora montato. Rivedete le impostazioni di failover insieme alle modifiche all'infrastruttura e testate sia il fallimento della connessione iniziale sia la successiva perdita di un nodo. Un nome SCAN raggiungibile non dimostra da solo che il servizio richiesto sia registrato su ogni endpoint elencato.
Stringhe di connessione SSL e TCPS
Un URL TCPS può essere analizzato correttamente e la connessione fallire comunque durante l'handshake. Passare da TCP a TCPS richiede un listener Oracle abilitato a TCPS, file di certificato o di wallet raggiungibili e una validazione del nome del server coerente con la policy dei certificati.
Partite da un descriptor:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=dbhost.example.com)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=APP_SERVICE)))
La porta deve corrispondere al listener TCPS configurato dal team del database. Un listener TCP raggiungibile non accetta un handshake TCPS, e raggiungere il listener TCPS non conferma che la configurazione del wallet o del trust sia utilizzabile.

Configurazione di wallet e certificati
I deployment basati su wallet impostano comunemente:
oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/wallet)))
Il wallet può usare l'auto-login o un archivio protetto da password. La sua directory deve essere montata dove la JVM può accedervi, con permessi che consentano al driver di leggere i file necessari. Se il trust è gestito da Java, configurate il relativo javax.net.ssl.trustStore invece di affidarvi soltanto a un wallet Oracle. Un design di sicurezza completo per le connessioni crittografate è trattato in questa guida alla protezione dei dati dei clienti.
Anche la corrispondenza del distinguished name del server richiede una configurazione consapevole. Impostate oracle.net.ssl_server_dn_match=true quando il client deve rifiutare i certificati la cui identità non corrisponde al nome del server previsto. Il subject del certificato e l'hostname devono comunque coincidere. La FAQ JDBC di Oracle documenta la sintassi specifica del driver e le opzioni di connessione supportate.
Un guasto di produzione è facile da fraintendere: la crittografia TCPS riesce, ma l'autenticazione basata su wallet no. Il driver può stabilire un canale crittografato e poi usare l'autenticazione con password perché il wallet non è stato caricato o le proprietà di autenticazione erano incomplete. Testate separatamente crittografia del trasporto, validazione dei certificati, caricamento del wallet e autenticazione. Un handshake del socket riuscito verifica solo il livello di trasporto, non l'intera configurazione di sicurezza.
Casi limite in produzione che rompono URL validi
Un URL può essere sintatticamente valido e comunque sbagliato dal punto di vista operativo. I guasti che fanno perdere più tempo riguardano di solito presupposti esterni alla stringa stessa.
Quattro guasti da testare prima del deployment
Alias TNS con punti:
jdbc:oracle:thin:@mydb.prod.example.compuò essere analizzato come notazione puntata invece che come l'alias previsto. Usate un descriptor esplicito, un percorsoTNS_ADMINaffidabile o una configurazioneTNS_ENTRYesplicita.Hostname nei container:
jdbc:oracle:thin:@//localhost:1521/XEPDB1punta al container dell'applicazione stesso quando Java gira in un container. Funziona solo se il database è raggiungibile tramite quell'indirizzo locale del container e la porta mappata. Altrimenti, usate il nome del servizio del database esposto alla rete dei container.URL RAC a host singolo: un singolo host può connettersi correttamente senza offrire alcun failover utile a livello di nodo. Usate la forma multi-host quando il servizio RAC e la topologia dei listener richiedono la selezione degli indirizzi lato client.
Caratteri riservati nelle password:
@,/e?possono corrompere l'analisi dell'URL. Fornite le credenziali tramiteOracleDataSource.setUseresetPasswordinvece di inserirle nell'URL.
Il punto su RAC è particolarmente facile da trascurare. Un nome di listener in stile SCAN può risolversi in un punto di accesso al cluster, ma un URL con un solo indirizzo non esprime comunque l'intera policy di failover. Easy Connect Plus o un descriptor equivalente rendono espliciti l'elenco degli indirizzi e il comportamento del servizio.
Casi limite e forma dell'URL funzionante
Caso limite | Frammento di URL errato | Frammento di URL funzionante |
|---|---|---|
Alias con punti |
|
|
localhost locale al container |
|
|
RAC senza topologia |
| Un descriptor multi-host con impostazioni di failover |
Carattere riservato nella password |
| URL senza credenziali, più |
La lezione operativa è in linea con il più ampio database reliability engineering: testate la connessione dallo stesso confine di runtime dell'applicazione. Una workstation, un pod Kubernetes e una VM di produzione possono avere DNS, file montati, truststore e proprietà del client Oracle diversi.
Errori comuni di Oracle JDBC e relative correzioni
La maggior parte degli errori di Oracle JDBC indica una discrepanza tra ciò che l'URL nomina e ciò che il listener registra.
Codice o messaggio di errore | Causa a livello di URL | Correzione |
|---|---|---|
| È stato fornito un SID dove il listener si aspetta un servizio, o viceversa | Verificate l'identificatore del target e passate da |
| Il service name non è registrato sul listener | Ottenete l'esatto service name registrato e correggete l'ultimo segmento dell'URL |
| Endpoint, protocollo, negoziazione TLS o comportamento del listener non corrispondono | Verificate la raggiungibilità dell'host, il tipo di listener e se l'URL debba usare |
| Un letterale IPv6 o dei due punti di troppo sono stati interpretati come parte della porta | Usate la sintassi dell'host accettata dal driver e mantenete univoco il delimitatore della porta |
| Lo schema di due punti e barre non corrisponde a una forma accettata con SID o service name | Confrontate l'URL con i due pattern canonici |
Rifiuto del protocollo da parte di SQL*Net | La porta è raggiungibile, ma il protocollo del client non corrisponde al listener | Puntate l'URL al listener corretto e applicate le proprietà TCPS descritte in precedenza |
Non reagite a ogni errore cambiando la porta. ORA-12505 e ORA-12514 sono di solito problemi di naming, mentre un rifiuto del protocollo richiede di verificare la modalità di trasporto del listener. Per un contesto operativo più ampio, i team possono collegare questa disciplina di troubleshooting alle tecniche di monitoraggio e auditing dei database.
Riferimento rapido per le stringhe di connessione JDBC per Oracle
Usate questa tabella come checklist di revisione del deployment, non come sostituto della conferma dei nomi registrati da parte del team del database.
Caso d'uso | Pattern dell'URL | Dipendenza chiave | Attenzione a |
|---|---|---|---|
SID |
| Un SID di istanza valido | Non usatelo quando il target espone solo un servizio |
Service name |
| Un servizio registrato sul listener | Mantenete |
Alias TNS |
|
| Gli alias con punti possono essere analizzati in modo inatteso |
Easy Connect Plus |
| Supporto di driver e database per le proprietà selezionate | Testate l'analisi delle proprietà e il comportamento del cluster |
TCPS con wallet |
| Listener TCPS, wallet, configurazione del trust e corrispondenza del DN | La sola crittografia non dimostra l'autenticazione tramite wallet |
Prima del rilascio, testate l'URL esatto dal runtime dell'applicazione, verificate se il target è un SID o un servizio, controllate i percorsi di alias e wallet e assicuratevi che le credenziali non siano esposte nei log.
digna offre un connettore per database Oracle con campi specifici di Oracle come DSN, UID, PWD, Driver e DBQ per la configurazione dell'integrazione con il database. Se l'affidabilità delle connessioni fa parte di un programma più ampio di data quality e osservabilità, visitate digna per scoprire come la sua piattaforma monitora il comportamento dei dati, la tempestività, la validazione e le modifiche agli schemi all'interno del vostro ambiente.
Guardate come digna lo fa in pratica: data quality per Oracle.
Domande frequenti
Qual è il formato generale di una stringa di connessione JDBC per Oracle?
La maggior parte degli URL del driver Thin si legge come jdbc:oracle:thin:@<connect_info>, ed è nella parte connect_info che i formati divergono. I caratteri subito dopo la @ determinano l'analisi: una doppia barra indica Easy Connect con un service name, mentre un host senza barre porta alla risoluzione come SID o alias TNS.
Qual è la differenza tra il formato con SID e quello con service name?
Il separatore. jdbc:oracle:thin:@dbhost:1521:ORCL usa i due punti e punta a un'istanza Oracle tramite SID, mentre jdbc:oracle:thin:@//dbhost:1521/ORCLPDB1 usa una barra e punta a un servizio registrato sul listener. Omettere la doppia barra fa ripiegare silenziosamente sull'analisi come SID, un errore comune.
Come ci si connette a Oracle RAC da JDBC?
Usate un descriptor con un ADDRESS_LIST che contenga più endpoint di listener, poi abilitate LOAD_BALANCE e FAILOVER. Una forma Easy Connect Plus più breve come @//scan.example.com:1521/APP_SERVICE?LOAD_BALANCE=on&FAILOVER=on è più facile da mantenere e conserva la topologia nella configurazione di deployment invece che in un tnsnames.ora montato.
Perché una password può rompere un URL JDBC per Oracle?
Perché i caratteri riservati entrano in conflitto con la grammatica dell'URL. Una @ in una password può essere scambiata per il delimitatore prima dell'host, un punto interrogativo per il separatore delle proprietà e una barra per il confine delle credenziali. Passate invece le credenziali tramite setUser e setPassword o un oggetto Properties.
Quali URL Oracle apparentemente validi falliscono comunque in produzione?
Quattro casi ricorrono. Gli alias TNS con punti vengono analizzati come notazione puntata, localhost punta al container dell'applicazione quando Java gira in un container, un URL a host singolo verso RAC si connette ma non offre failover a livello di nodo, e TCPS può crittografare correttamente mentre l'autenticazione tramite wallet fallisce comunque.



