Oracle SQL*Net v.2, introdotta a partire dalla versione 7.0 di Oracle, fornisce nuove funzionalita' rispetto alla versione precedente e presenta una architettura e configurazione differente.
In questo breve documento ne vengono descritte le principali modalita' di utilizzo e configurazione.
SQL*Net V.2 fornisce tutte le funzionalita' di SQL*Net V.1, tra queste:
Sono inoltre presenti nuove interessanti funzionalita':
Utilizzo da parte dell'utente/applicazioni
L'utilizzo da parte di un utente/applicazione di SQL*Net V.2 e' molto semplice. E' infatti sufficiente specificare l'alias nella stringa di connessione.
Ad esempio:
$ sqlplus scott/tiger@sunset
In pratica rispetto alla versione precedente si utilizza semplicemente un nome logico rispetto all'indicazione di rete, indirizzo, SID, ..
Analogamente avviene per la definizione dei database link.
Ad esempio:
SQL> create database link sunset 2 connect to scott identified by tiger 3 using sunset;
Con l'utilizzo di database link e sinonimi e' possibile rendere completamente trasparente ad utenti/applicazioni la distribuzione dei dati.
Passaggio a SQL*Net V.2
Il passaggio da SQL*Net V.1 a SQL*Net V.2 e' fortemente consigliato.
Tra le diverse ragioni citiamo:
Il passaggio alla nuova versione richiede un'attenta pianificazione in particolare per quanto riguarda le configurazioni dei vari server/client.
Poiche' nella versione 7.2 di Oracle sono supportate, e possono operare contemporaneamente, le due versioni di SQL*Net e' possibile effettuare un passaggio graduale alla V2.
Non esiste una versione SQL*Net V.2 per MS-DOS (e' tuttavia disponibile nei diversi ambienti MS-Windows).
Configurazione
Per la configurazione sono disponibili diversi ambienti e strumenti forniti da Oracle che facilitano l'operativa (eg. SQL*Net Easy Configuration). In alcuni casi e per alcuni parametri e' comunque necessaria una modifica manuale dei file di configurazione.
L'utilizzo di tali strumenti non e' descritto in questo documento.
Configurazione client
La configurazione sul client consente di definire la corrispondenza tra alias e servizi Oracle. Il file da configurare e' tnsnames.ora e' relativo a tutti i protocolli di rete e, generalmente, risiede in $ORACLE_HOME/network/admin.
Ad esempio:
# # Filename: tnsnames.ora # Modified by mail@meo.bogliolo.name on 1 Jan 1997 # sunset = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = company.com) (PROTOCOL = TCP) (Host = smile) (Port = 1521) ) ) (CONNECT_DATA = (SID = demodb) ) )
Nella configurazione d'esempio si fa riferimento ad un listener sulla macchina smile in ascolto sulla porta TCP-IP 1521. Nelle configurazioni tipiche vengono riportate tutte le possibili connessioni a database aziendali.
Il file TNSNAMES.ORA e' necessario anche
sulle macchine tipicamente
intese come server se da esse si vuole accedere all'esterno
(eg. come nel caso di utilizzo DBLINK).
Se non si e' definita l'entry nel file tnsnames.ora
e' anche possibile utilizzare l'indirizzo completo da linea di comando
(ma naturalmente e' un po' scomodo):
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=smile.company.com)(Port=1521)))(CONNECT_DATA=(SID=demodb)))
Su PC la configurazione e' molto semplice utilizzando il tool SQL*Net Easy Conf.
Una nota sulla nuova versione di SQL*Net Net80. Viene ora utilizzato il Global Database Name al posto del SID per indicare l'istanza cui connettersi. Connettendosi quindi ad un listener in v8 la sintassi e':
(CONNECT_DATA = (SERVICE_NAME = demodb)
Configurazione server
La configurazione sul server richiede la definizione delle caratteristiche del listener. Il listener e' il programma che ascolta le richieste di connessione che provengono dalla rete ed attiva le risorse corrispondenti.
A differenza di SQL*Net v.1, il listener e' multiprotocollo e puo' ricevere quindi connessioni da sorgenti diverse (anche locali).
LISTENER= (ADDRESS_LIST= (ADDRESS= (PROTOCOL=ipc) (KEY=dbdemo) ) (ADDRESS= (PROTOCOL=TCP) (HOST = sunset) (PORT = 1521) ) ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=dbdemo) (ORACLE_HOME=/usr/oracle) ) ) STARTUP_WAIT_TIME_LISTENER = 5 CONNECT_TIMEOUT_LISTENER = 60 TRACE_LEVEL_LISTENER = OFF PASSWORD_LISTENER =
Sul listener vengono riportati gli estremi per le connessioni a tutte le istanze servite dal sistema.
Poiche' la porta socket viene esplicitamente indicata nelle configurazioni (sia client che server) non e' generalmente necessario configurare il file /etc/services.
Alcune configurazioni particolari
Sono possibili diverse configurazioni particolari i cui elementi principali vengono riportati nel seguito.
In caso di configurazioni piu' complesse puo' essere necessario configurare anche i file TNSNAMES.ORA, TNSNAV.ORA, SQLNET.ORA, PROTOCOL.ORA ed INITX.ORA.
La configurazione in MTS (MultiThreaded Server) offre notevoli vantaggi prestazionali nel caso di numero elevato di utenti. Maggiori elementi si trovano descritti nello specifico documento Utilizzo di Oracle Multithreaded Server.
E' possibile creare un'entry nel file tnsnames.ora che effettua la connessione al RDBMS Oracle locale via PIPE. Tale connessione e' notevolmente efficiente (per gli accessi locali). Ad esempio:
sunsetb = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = beq) (PROGRAM = /usr/oracle/bin/oracle) (ARGV0 = oracle_BEQ_sunset) (ARGS = '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))') ) ) (CONNECT_DATA = (SID = demodb) ) )
E' possibile far operare una macchina come "gateway SQL*Net" di comunicazione tra due reti con protocolli differenti. In tal modo client su una rete possono operare su server attivi su reti con protocolli differenti oppure utilizzare meccanismi di proxing necessari per operare con firewall. Il nome del prodotto e' cambiato a seconda delle versioni di Oracle (Oracle Multiprotocol Interchange, Connection Manager) ma le caratteristiche e funzionalita' sono simili.
In questo caso la configurazione della macchina "gateway" avviene agendo sul file cman.ora.
E' possibile configurare in load balancing due, o piu', istanze Oracle. In tale configurazione si ha un solo listener che distribuisce richieste di accesso su piu' istanze (queste istanze possono essere diverse istanze di un Paralled DB, accessi a database in sola lettura o, anche, istanze aggiornate con la Advanced Replication). Per la configurazione e' possibile utilizzare la il MTS e fare riferimento allo stesso listener in entrambe le istanze.
E' possibile utilizzare piu' listener che servano la stessa istanza Oracle e fare in modo che i client accedano in load balancing sui diversi listener. Debbono essere attivati piu' listener (eventualmente su piattaforme differenti) ed il file TNSNAMES.ORA dei client deve far riferimento ad entrambi per lo stesso servizio. In questo caso e' possibile accedere alla stessa istanza mediante, ad esempio, protocolli di rete differenti.
E' infine possibile avere una relazione di molti a molti tra listener ed istanze. I casi in cui si effettuano tali configurazioni sono dovuti a situazioni realmente complesse e particolari o a paranoie di utenti/DBA.
Principali parametri
Nel seguito riportiamo alcuni parametri di comune utilizzo.
Nel file SQLNET.ORA sul client e' possibile impostare un livello di trace (file sqlnet.trc) per analizzare eventuali errori (TRACE_LEVEL_CLIENT=USER), per default e' in off. E' invece sempre attivo il logging degli errori (file sqlnet.log), nel caso invece in cui non si voglia alcun file di log e' possibile ridirigerlo in questo modo:
LOG_DIRECTORY_CLIENT = /dev/null LOG_FILE_CLIENT = /dev/null
Per attivare i controlli sull'effettiva presenza della connessione (keepalive) e' sufficiente inserire il parametro SQLNET.EXPIRE_TIME=10 nel file SQLNET.ORA sui client. Il valore indicato e' l'intervallo di tempo tra due invii di un messaggio di keepalive della linea.
Questo parametro permette la disconnessione automatica di connessioni
non attive e la relativa liberazione di risorse e lock associati.
Sul sistema operativo ospite possono inoltre essere configurati parametri
di timeout (eg. TCP-IP Connection Timeout).
Per esempio su AIX (lo Unix di IBM) si puo' utilizzare il comando no,
sugli altri Unix si configurano parametri del kernel (la modifica richiede un reboot),
con MS-NT4 si possono configurare i valori dei registri TcpKeepCnt
e TcpKeepTries.
Ma e' opportuno
modificare tali parametri con molta attenzione.
Se non sapete esattamente cosa state facendo lasciate stare (ed anche se lo sapete
forse non vi conviene lo stesso toccare!)
Nel caso di istanze con un grande numero di utenti e, in contemporanea, di applicazioni o procedure "batch" sia la configurazione in MTS che a server dedicato possono risultare inadeguate. E' in questi casi opportuno utilizzare l'MTS per le utenze normali e configurare i client "batch" in modo che venga loro riservato un processo dedicato. Il parametro e' USE_DEDICATED_SERVER=ON e viene posto nel file SQLNET.ORA.
Quando un client effettua un tentativo di connessione ad Oracle invia la stringa username/password in modo criptato. Se la connessione non avviene il client effettua un secondo tentativo con username/password in chiaro (tale comportamento e' presente per compatibilita' a precedenti versioni dell'RDBMS).
Per evitare l'invio di username/password in chiaro debbono essere settati la variabile ORA_ENCRYPT_LOGIN sul client ed il parametro DBLINK_ENCRYPT_LOGIN sul server (i parametri sono disponibili dalla versione 7.1). Ad esempio in MS-DOS:
rem File: AUTOEXEC.BAT rem Oracle SQL*Net Password Encryption Forcing set ORA_ENCRYPT_LOGIN=TRUE
E' possibile specificare qual e' la connessione di default che si effettua in remoto.
Su ambiente PC e' sufficiente impostare il parametro LOCAL nel file ORACLE.INI.
In ambiente Unix e' possibile impostare la variabile di ambiente TWO_TASK.
Opzioni dell'RDBMS
Sono disponibili diverse altre opzioni o pacchetti Oracle il cui utilizzo e' connesso a SQL*Net.
L'accesso a DBMS differenti da Oracle prevede l'acquisto del relativo prodotto di gateway (eg. Oracle Transparent Gateway for DB2). Le funzionalita' presenti sono generalmente fornite dall'intersezione delle funzioni dei due RDBMS (anche se alcune funzioni non presenti nel DB non Oracle vengono implementate dal Transparent Gateway stesso).
L'utilizzo delle funzioni di Distribuite Database (in scrittura) richiede l'installazione della relativa opzione DDO (Distribuited Database Option) che e' compresa nella versione 7.3 Enterprise dell'RDBMS.
L'utilizzo delle funzioni di replicazione asincrona, multimaster, .. richiede l'installazione delle relativa opzione ARO (Advanced Replication Option) che e' compresa nella versione 7.3 Enterprise dell'RDBMS.
L'utilizzo delle funzioni di encryption, validation, naming, .. sulle connessioni SQL*Net richiede l'installazione delle relativa opzione Advanced Network Option, tale opzione e' richiedibile separatamente sulle varie piattaforme.
Nel caso di configurazioni ampie e complesse puo' risultare utile il pacchetto Oracle Names che consente una definizione unica e centralizzata delle stringhe di connessione SQL*Net V.2. Il programma e' fornito con la versione 7.3 Enterprise.
SSL/TLS
E' possibile crittografare il traffico tra client e Oracle o effettuare la strong authentication utilizzando i piu' recenti algoritmi di crittografazione, il protocollo SSL e la sua evoluzione TLS.
Per la crittografia sul client va impostato il parametro SQLNET.ENCRYPTION_CLIENT
con uno dei valori: Rejected, Accepted, Requested, Required.
Sul server il parametro analogo e' SQLNET.ENCRYPTION_SERVER
inoltre va impostato il parametro SQLNET.ENCRYPTION_TYPES_SERVER
con uno dei valori:
DES, 3DES168, AES128, AES256, RC4_128, RC4_256, ...
Se i parametri del client non trovano una corrispondeza con quelli del server viene
restituito l'errore ORA-12660.
Per verificare la network integrity i parametri sono SQLNET.CRYPTO_CHECKSUM_CLIENT e SQLNET.CRYPTO_CHECKSUM_SERVER con le impostazioni: Rejected, Accepted, Requested, Required. In questo caso gli algoritmi utilizzabili sono: MD5, SHA-1, SHA-2 (SHA256, SHA384, SHA512).
Per la strong authentication sono necessari alcuni passi di configurazione:
SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION= (SOURCE= (METHOD=file) (METHOD_DATA=(DIRECTORY=/home/oracle/app/oracle/product/11.1.0/dbhome_1/db_wallet)))
(ADDRESS = (PROTOCOL = TCPS)(HOST = 10.1.1.69)(PORT = 2484)) WALLET_LOCATION= (SOURCE= (METHOD=file) (METHOD_DATA=(DIRECTORY=/home/oracle/app/oracle/product/11.1.0/dbhome_1/db_wallet)))
Versioni
Le versioni di SQL*Net sono agganciate a quelle dell'RDBMS Oracle. SQL*Net v2 e' disponibile a partire dalla versione 7.0 di Oracle RDBMS.
Con la versione 7.0 dell'RDBMS e' distribuito l'SQL*Net v2.0.
...
Con la versione 7.3 dell'RDBMS e' stato distribuito l'SQL*Net v2.3.
A partire dalla 7.3 dell'RDBMS non e' piu' distribuita l'SQL*Net v.1.
A partire dalla 7.3 dell'RDBMS l'Advanced Network Option sostituisce i prodotti Secure Network Services e SQL*Net/DCE.
Le differenti release relative alla stessa versione sono tra loro compatibili. E' quindi possibile utilizzare un client con SQL*Net 2.1 verso un server con SQL*Net 2.3 mentre non e' possibile utilizzare da SQL*Net v.1 la versione SQL*Net v.2.
I prodotti opzionali (eg. Advanced Networking Option) invece richiedono versioni e release allineate.
E per finire... con la 8 di Oracle e' arrivato Net8!
Ma tale nuova versione non presenta grandissimi cambiamenti rispetto a
SQL*Net v.2. Comunque ne parleremo magari un'altra volta...
Solo un piccolo accenno sulle differenze:
Sintassi precedente (utilizza il SID): sales= (description= (address=(protocol=tcp)(host=sales-sun1)(port=1521)) (connect_data= (sid=sales)) Sintassi Net 8 (utilizza il SERVICE_NAME): sales= (description= (address=(protocol=tcp)(host=sales-sun1)(port=1521)) (connect_data= (service_name=sales.us.acme.com))
Altre informazioni
Puo' essere utile la seguente tabella:
SQL*Net V1 | SQL*Net V2 | NetX | |
---|---|---|---|
Default port | 1525/tcp | 1521/tcp | 1521/tcp |
Start command | tcpctl start | lsnrctl start | lsnrctl start |
Stop command | tcpctl stop | lsnrctl stop | lsnrctl stop |
Connect string | protocol:host:sid eg. T:SRV1:DB1 | Specified in TNSNAMES.ORA | Specified in TNSNAMES.ORA |
Config files | /etc/oratab | tnsnames.ora, sqlnet.ora & listener.ora | tnsnames.ora, sqlnet.ora & listener.ora |
Env variable | LOCAL= | TWO_TASK= | TWO_TASK= |
NetX utilizza protocolli di autenticazione che nel tempo sono cambiati
e, in generale, non permette l'accesso al DB se la differenza di versioni
tra client e server e' superiore a 2
restituendo l'errore ORA-28040 o ORA-3134.
E' tuttavia possibile aggirare tale limite agendo sulla variabile
SQLNET.ALLOWED_LOGON_VERSION_SERVER.
I valori possibili sono:
Argomenti distinti, ma che presentano aspetti architetturali di interesse, sono:
Testo: Configurazione di SQL*Net v.2
Data: 17 Settembre 1997
Versione: 1.3.9 - 14 Febbraio 2017
Autore: mail@meo.bogliolo.name