Connetti applicazioni Python con mTLS

SI APPLICA A: Applicabile solo Exadata Cloud@Customer

È possibile connettere le applicazioni Python all'istanza di Autonomous Database utilizzando mTLS.

La connessione di un'applicazione Python con mTLS garantisce maggiore sicurezza per l'autenticazione e la cifratura e la sicurezza viene applicata utilizzando le credenziali client (fornendo un nome utente e una password).

La "modalità thin" predefinita del driver python-oracledb si connette direttamente a Oracle Database. Il driver può facoltativamente utilizzare le librerie del client Oracle, "Modalità Spessa", per alcune funzionalità aggiuntive. Le librerie Oracle Client possono essere da Oracle Instant Client, dal client Oracle completo o da un'installazione di Oracle Database.

Attenersi alla procedura riportata di seguito per connettere l'applicazione Python a un'istanza di Autonomous Database utilizzando mTLS.

  1. Installare Python e il driver python-oracledb
  2. Ottenere le credenziali di sicurezza (Oracle Wallet) e abilitare la connettività di rete
  3. Eseguire questo passo se si desidera connettersi solo in modalità Thin: Esegui applicazione Python con modalità Thin python-oracledb (mTLS)
  4. Eseguire questo passo se si desidera connettersi in modalità Spessa: Eseguire l'applicazione Python con la modalità Spessa python-oracledb (mTLS)

Installare Python e il driver python-oracledb

Per connettersi a Autonomous Database dall'applicazione Python, installare Python e il driver python-oracledb.

  1. Installare Python 3, se non è già disponibile.

    La versione di Python utilizzata dipende dal sistema operativo e dall'hardware lato client. Ad esempio, Windows, Linux, macOS e altri.

    Nota

    Oracle consiglia di rimanere aggiornato con le release dei driver Python e python-oracledb.
  2. Installare il driver python-oracledb da PyPI.

    Il driver python-oracledb è un modulo di estensione del linguaggio di programmazione Python che consente ai programmi Python di connettersi a Oracle Database. Il driver python-oracledb è la nuova release principale rinominata del popolare driver cx_Oracle.

    Versioni del driver python-oracledb supportate: python-oracledb 1.0 (o versioni successive)

    Eseguire il comando riportato di seguito per aggiornare python:

    python -m pip install oracledb --upgrade

    Dovrebbe essere visualizzato un output simile al seguente:

    Collecting oracledb
      Downloading oracledb-1.0.3-cp310-cp310-win_amd64.whl (1.0 MB)
         ---------------------------------------- 1.0/1.0 MB 1.8 MB/s eta 0:00:00
    Collecting cryptography>=3.4
      Downloading cryptography-37.0.4-cp36-abi3-win_amd64.whl (2.4 MB)
         ---------------------------------------- 2.4/2.4 MB 3.5 MB/s eta 0:00:00
    Collecting cffi>=1.12
      Downloading cffi-1.15.1-cp310-cp310-win_amd64.whl (179 kB)
         ---------------------------------------- 179.1/179.1 kB 5.4 MB/s eta 0:00:00
    Collecting pycparser
      Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
         ---------------------------------------- 118.7/118.7 kB 7.2 MB/s eta 0:00:00
    Installing collected packages: pycparser, cffi, cryptography, oracledb
    Successfully installed cffi-1.15.1 cryptography-37.0.4 oracledb-1.0.3 pycparser-2.21

    Note per l'installazione di python-oracledb:

    • Se si è dietro un proxy, utilizzare l'opzione --proxy per aggiungere un server proxy al comando. Ad esempio:

      python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80
    • Se non si dispone dell'autorizzazione per scrivere nelle directory di sistema, includere l'opzione --user. Ad esempio:

      python -m pip install oracledb --upgrade --user
    • Se un pacchetto binario non è disponibile per la piattaforma in uso, l'esecuzione di pip comporta il download del pacchetto di origine. L'origine viene compilata e il file binario risultante viene installato.

    Per ulteriori opzioni e suggerimenti, vedere Installazione di python-oracledb.

  3. Se si desidera utilizzare il driver python-oracledb in modalità Spessa, installare il software Oracle Client.

    Per impostazione predefinita, python-oracledb viene eseguito in modalità Thin che si connette direttamente a Oracle Database. La modalità Thin non richiede le librerie client Oracle. Tuttavia, alcune funzionalità aggiuntive sono disponibili quando python-oracledb viene eseguito in modalità Spessa.

    Nota

    Per informazioni sulle funzioni supportate nelle modalità Thin e Thick di python-oracledb, vedere Oracle Database Features Supported by python-oracledb. Non tutte le funzioni mostrate in questo collegamento sono disponibili con Autonomous Database.

    Python-oracledb utilizza la modalità Spessa quando si utilizzano le librerie client Oracle Instant o le librerie client Oracle Database e si chiama oracledb.init_oracle_client() nel codice Python.

    Quando si installa Oracle Client Software, le versioni minime richieste per le connessioni mTLS e TLS sono diverse, come descritto di seguito.

    • Connessioni mTLS (mutual TLS):

      • Se il database si trova su un computer remoto, scaricare il pacchetto gratuito Oracle Instant Client "Basic" o "Basic Light" per l'architettura del sistema operativo. Utilizzare una versione supportata: Oracle Instant Client: 18.19 (o versioni successive), 19.2 (o versioni successive) o 21 (release di base o successive).

      • In alternativa, è possibile utilizzare le librerie client Oracle Database complete quando sono disponibili nel sistema (incluso Full Oracle Database Client: Oracle Database Client: 18.19 (o versioni successive), 19.2 (o versioni successive) o 21 (release base o successive).

    • Connessioni TLS: i client Oracle Call Interface (OCI) supportano l'autenticazione TLS se si utilizzano le versioni client seguenti:

      • Oracle Instant Client/Oracle Database Client 19.14 (o versioni successive) e 21.5 (o versioni successive): tutte le piattaforme
      • In alternativa, è possibile utilizzare le librerie client Oracle Database complete quando sono disponibili nel sistema, inclusi Full Oracle Database Client 19.14 (o versioni successive) e 21.5 (o versioni successive).

Ottenere le credenziali di sicurezza (Oracle Wallet) e abilitare la connettività di rete

Ottenere le credenziali di sicurezza client per connettersi a un'istanza di Autonomous Database.

  1. Scaricare un file wallet dall'istanza di Autonomous Database per ottenere un file zip che contenga le credenziali di sicurezza client e le impostazioni di configurazione di rete necessarie per accedere a un'istanza di Autonomous Database.

    Ottenere le credenziali di sicurezza del client (file wallet.zip):

    • Utente ADMIN: nella console di Oracle Cloud Infrastructure fare clic su Connessione al database. Vedere Scarica credenziali client (wallet).

    • Altro utente (non amministratore): ottenere Oracle Wallet dall'amministratore per l'istanza di Autonomous Database.

    Nota

    Proteggere il file wallet.zip e il relativo contenuto per impedire l'accesso non autorizzato al database.
  2. Estrarre il file delle credenziali client (wallet.zip).

Esegui applicazione Python con modalità thin python-oracledb (mTLS)

Per impostazione predefinita, python-oracledb utilizza la modalità Thin per connettersi direttamente all'istanza di Autonomous Database.

In modalità Thin sono necessari solo due file dal file zip del wallet:

  • tnsnames.ora: associa i nomi dei servizi di rete utilizzati per le stringhe di connessione dell'applicazione ai servizi di database.

  • ewallet.pem: abilita le connessioni SSL/TLS in modalità Thin.

Per connettersi in modalità sottile:

  1. Spostare i file tnsnames.ora e ewallet.pem in una posizione del sistema.

    Ad esempio su Linux:

    /opt/OracleCloud/MYDB

    Ad esempio, in Windows:

    C:\opt\OracleCloud\MYDB
  2. Nella tua applicazione Python, impostare i seguenti parametri di connessione per connettersi a un'istanza di Autonomous Database:
    • config_dir: specifica la directory che contiene tnsnames.ora.
    • dsn: consente di specificare l'alias di rete desiderato dal file tnsnames.ora.
    • password: specifica la password utente del database.
    • user: specifica l'utente del database.
    • wallet_location: specifica la directory che contiene il file PEM (ewallet.pem).
    • wallet_password: specifica la password per il file PEM (ewallet.pem). La password viene impostata quando si scarica il file wallet.zip.

    Ad esempio, in Linux per connettersi come utente ADMIN utilizzando oracledb.connect con il nome del servizio di rete db2024_low (il nome del servizio si trova in tnsnames.ora):

    connection=oracledb.connect(
         config_dir="/opt/OracleCloud/MYDB",
         user="admin",
         password=password,
         dsn="db2024_low",
         wallet_location="/opt/OracleCloud/MYDB",
         wallet_password=wallet_pw)

    Ad esempio, in Windows per connettersi come utente ADMIN utilizzando oracledb.connect con il nome del servizio di rete db2024_low (il nome del servizio si trova in tnsnames.ora):

    connection=oracledb.connect(
         config_dir=r"C:\opt\OracleCloud\MYDB",
         user="admin",
         password=password,
         dsn="db2024_low",
         wallet_location=r"C:\opt\OracleCloud\MYDB",
         wallet_password=wallet_pw)

    L'uso di una stringa 'raw' r"..." significa che le barre rovesciate vengono trattate come separatori di directory.

    Come illustrato in questo esempio, wallet_location e config_dir vengono impostati sulla stessa directory (e la directory contiene tnsnames.ora e ewallet.pem). Non è necessario specificare la stessa directory per questi file.

Se si è protetti da un firewall, è possibile eseguire il tunneling delle connessioni TLS/SSL tramite un proxy utilizzando HTTPS_PROXY nel descrittore di connessione o impostando gli attributi di connessione. La connessione riuscita dipende da configurazioni proxy specifiche. Oracle sconsiglia di utilizzare un proxy in un ambiente di produzione, a causa del possibile impatto sulle prestazioni. Per ulteriori informazioni, consulta HTTPS_PROXY in Oracle Database 19c Database Net Services Reference oppure Oracle Database 23ai Database Net Services Reference.

In modalità Thin è possibile specificare un proxy aggiungendo i parametri https_proxy e http_proxy_port.

Ad esempio, su Linux:

connection=oracledb.connect(
     config_dir="/opt/OracleCloud/MYDB",
     user="admin",
     password=password,
     dsn="db2024_low",
     wallet_location="/opt/OracleCloud/MYDB",
     wallet_password=wallet_pw,
     https_proxy='myproxy.example.com',
     https_proxy_port=80)

Ad esempio, in Windows:

connection=oracledb.connect(
     config_dir=r"C:\opt\OracleCloud\MYDB",
     user="admin",
     password=password,
     dsn="db2024_low",
     wallet_location=r"C:\opt\OracleCloud\MYDB",
     wallet_password=wallet_pw,
     https_proxy='myproxy.example.com',
     https_proxy_port=80)

Eseguire l'applicazione Python con modalità Spessore python-oracledb (mTLS)

Per impostazione predefinita, python-oracledb viene eseguito in modalità Thin che si connette direttamente a Oracle Database. Sono disponibili funzioni aggiuntive di python-oracledb quando il driver viene eseguito in modalità Spessa.

Nota

La modalità Spessa richiede che le librerie del client Oracle siano installate in cui si esegue Python. È inoltre necessario chiamare oracledb.init_oracle_client() nel codice Python.

In modalità Spessa sono necessari i tre file seguenti del file zip del wallet:

  • tnsnames.ora: contiene i nomi dei servizi di rete utilizzati per le stringhe di connessione dell'applicazione e le mappa ai servizi di database.

  • sqlnet.ora: specifica la configurazione lato client SQL*Net.

  • cwallet.sso: contiene il wallet SSO con apertura automatica.

Per connettersi in modalità Spessa:

  1. Inserire i file tnsnames.ora, sqlnet.ora e cwallet.sso nel sistema.

    Utilizzare una delle due opzioni per posizionare i file sul sistema:

    • Se si utilizza Instant Client, spostare i file in una gerarchia di sottodirectory network/admin nella directory Instant Client. Ad esempio, a seconda dell'architettura o del sistema client e della posizione in cui è stato installato Instant Client, i file devono trovarsi in una posizione di directory come:

      /home/myuser/instantclient_19_21/network/admin

      o

      /usr/lib/oracle/19.21/client64/lib/network/admin

      Ad esempio, in Linux se si utilizza il client Oracle completo, spostare i file in $ORACLE_HOME/network/admin.

    • In alternativa, spostare i file in qualsiasi directory accessibile.

      Ad esempio, in Linux spostare i file nella directory /opt/OracleCloud/MYDB e modificare sqlnet.ora per modificare la directory di posizione del wallet nella directory contenente il file cwallet.sso.

      Ad esempio, in Linux modificare sqlnet.ora come segue:

      WALLET_LOCATION = (SOURCE = (METHOD=file) (METHOD_DATA = (DIRECTORY="/opt/OracleCloud/MYDB")))
      SSL_SERVER_DN_MATCH=yes

      Quando i file di configurazione non si trovano nella posizione predefinita, l'applicazione deve indicare dove si trovano, con il parametro config_dir nella chiamata oracledb.init_oracle_client() o impostando la variabile di ambiente TNS_ADMIN.

      Nota

      Nessuna di queste impostazioni è necessaria e non è necessario modificare sqlnet.ora se si inseriscono tutti i file di configurazione nella directory network/admin.
  2. Nell'applicazione Python impostare i seguenti parametri di inizializzazione e connessione per connettersi all'istanza di Autonomous Database:
    • config_dir: specifica la directory di configurazione durante la memorizzazione dei file di configurazione. Ciò è necessario solo quando i file di configurazione vengono posizionati in una directory esterna alla directory di configurazione del client istantaneo network/admin.
    • dsn: specifica l'alias di rete desiderato dal file tnsnames.ora.
    • password: specifica la password utente del database.
    • user: specifica l'utente del database.

    Nel primo caso per il posizionamento dei file di configurazione, connettersi all'istanza di Autonomous Database utilizzando le credenziali del database impostando il parametro dsn sull'alias di rete desiderato da tnsnames.ora.

    Ad esempio, per connettersi come utente ADMIN utilizzando oracledb.init_oracle_client e connettersi al nome del servizio di rete db2024_low (dove il nome del servizio si trova in tnsnames.ora):

    oracledb.init_oracle_client()
       connection=oracledb.connect(
           user="admin",
           password=password,
           dsn="db2024_low")

    Quando i file di configurazione si trovano in una directory esterna alla directory di configurazione di Instant Client, impostare il parametro config_dir quando si chiama oracledb.init_oracle_client.

    Ad esempio, su Linux per connettersi come utente ADMIN utilizzando il nome del servizio di rete db2024_low:

    oracledb.init_oracle_client(config_dir="/opt/OracleCloud/MYDB")
       connection=oracledb.connect(
          user="admin",
          password=password,
          dsn="db2024_low")

    Ad esempio, in Windows per connettersi come utente ADMIN utilizzando il nome del servizio di rete db2024_low:

    oracledb.init_oracle_client(config_dir=r"C:\opt\OracleCloud\MYDB")
       connection=oracledb.connect(
          user="admin",
          password=password,
          dsn="db2024_low")

    L'uso di una stringa 'raw' r"..." significa che le barre rovesciate vengono trattate come separatori di directory.

Se si è protetti da un firewall, è possibile eseguire il tunneling delle connessioni TLS/SSL tramite un proxy utilizzando HTTPS_PROXY nel descrittore di connessione o impostando gli attributi di connessione. La connessione riuscita dipende da configurazioni proxy specifiche. Oracle sconsiglia di utilizzare un proxy in un ambiente di produzione, a causa del possibile impatto sulle prestazioni. Per ulteriori informazioni, consulta HTTPS_PROXY in Oracle Database 19c Database Net Services Reference oppure Oracle Database 23ai Database Net Services Reference.

In modalità Spessa è possibile specificare un proxy modificando il file sqlnet.ora e aggiungendo una riga:

SQLNET.USE_HTTPS_PROXY=on

Inoltre, modificare tnsnames.ora e aggiungere un nome proxy HTTPS_PROXY e una porta HTTPS_PROXY_PORT alla lista di indirizzi del descrittore di connessione di qualsiasi nome di servizio che si prevede di utilizzare.

Ad esempio:

mydb_high=(description=
(address=(https_proxy=myproxy.example.com)
(https_proxy_port=80)
(protocol=tcps)(port=1522)(host=...)

Per informazioni sulla modalità Spessa, vedere Abilitazione della modalità Spessa di python-oracledb.