Connettere le applicazioni Python con mTLS

SI APPLICA A: Applicabile Solo Exadata Cloud@Customer

Puoi connettere le applicazioni Python all'istanza di Autonomous AI Database utilizzando mTLS.

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

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

Per connettere l'applicazione Python a un'istanza di Autonomous AI Database mediante mTLS, effettuare le operazioni riportate di seguito.

  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à sottile: Eseguire l'applicazione Python con la modalità sottile python-oracledb (mTLS)
  4. Eseguire questo passo se si desidera eseguire la connessione in modalità Spessa: Esegui applicazione Python con modalità Spessa python-oracledb (mTLS)

Installare Python e il driver python-oracledb

Per connettersi a Autonomous AI 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 aggiornati sulle release dei driver Python e python-oracledb.

  2. Installare il driver python-oracledb da PyPI.

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

    Versioni del driver python-oracledb supportate: python-oracledb 1.0 (o versione successiva)

    Eseguire il comando seguente per aggiornare python:

     python -m pip install oracledb --upgrade
    

    L'output dovrebbe essere 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 utilizza 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
      
    • Nel caso in cui non si disponga dell'autorizzazione per scrivere nelle directory di sistema, includere l'opzione --user. Ad esempio:

      python -m pip install oracledb --upgrade --user
      
    • Se non è disponibile un pacchetto binario per la piattaforma in uso, l'esecuzione di pip comporta il download del pacchetto di origine. La sorgente è compilata e il binario risultante è 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à sottile che si connette direttamente a Oracle Database. La modalità thin non richiede librerie Oracle Client. 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 python-oracledb, vedere Funzioni di Oracle Database supportate da python-oracledb. Non tutte le funzioni mostrate in questo collegamento sono disponibili con Autonomous AI 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, per le connessioni mTLS e TLS sono necessarie versioni minime diverse, come indicato di seguito.

    • Connessioni TLS (mTLS) reciproche:

      • 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 versione successiva), 19.2 (o versione successiva) o 21 (versione di base o versione successiva).

      • In alternativa, è possibile utilizzare le librerie client Full Oracle Database quando sono disponibili sul sistema (incluso Full Oracle Database Client: Oracle Database Client: 18.19 (o versione successiva), 19.2 (o versione successiva) o 21 (release di base o versione successiva).

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

      • Oracle Instant Client/Oracle Database Client 19.14 (o versione successiva) e 21.5 (o versione successiva) - tutte le piattaforme

      • In alternativa, è possibile utilizzare le librerie client Oracle Database complete quando sono disponibili sul sistema, inclusi Full Oracle Database Client 19.14 (o versione successiva) e 21.5 (o versione successiva).

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

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

  1. Scaricare un file wallet dall'istanza di Autonomous AI Database per ottenere un file zip contenente le credenziali di sicurezza client e le impostazioni di configurazione di rete necessarie per accedere a un'istanza di Autonomous AI 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 Download delle credenziali client (wallet).

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

      Nota: proteggere il file wallet.zip e il relativo contenuto per impedire l'accesso non autorizzato al database.

  2. Decomprimere il file delle credenziali client (wallet.zip).

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

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

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

Per connettersi in modalità Sottile:

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

    Linux

    Ad esempio, su Linux:

     /opt/OracleCloud/MYDB
    

    Windows

    Ad esempio, in Windows:

     C:\opt\OracleCloud\MYDB
    
  2. Nell'applicazione Python impostare i parametri di connessione seguenti per connettersi a un'istanza di Autonomous AI Database:

    • config_dir: specifica la directory contenente 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 contenente il file PEM (ewallet.pem).

    • wallet_password: specifica la password per il file PEM (ewallet.pem). Impostare questa password quando si scarica il file wallet.zip.

    Linux

    Ad esempio, su 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)
    

    Windows

    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 mostrato in questo esempio, wallet_location e config_dir sono 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 specifiche configurazioni proxy. Oracle sconsiglia l'utilizzo di un proxy in un ambiente di produzione a causa del possibile impatto sulle prestazioni. Per ulteriori informazioni, vedere HTTPS_PROXY in Oracle Database 19c Database Net Services Reference o Oracle Database 26ai 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)

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

Per impostazione predefinita, python-oracledb viene eseguito in modalità sottile che si connette direttamente a Oracle Database. Ulteriori funzionalità di python-oracledb sono disponibili quando il driver viene eseguito in modalità Spessa.

Nota: la modalità Spessa richiede che le librerie del client Oracle siano installate dove si esegue Python. È inoltre necessario chiamare oracledb.init_oracle_client() nel codice Python.

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

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, su Linux spostare i file nella directory /opt/OracleCloud/MYDB e modificare sqlnet.ora per cambiare 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 parametri di inizializzazione e connessione riportati di seguito per connettersi all'istanza di Autonomous AI Database.

    • config_dir: specifica la directory di configurazione durante l'inserimento dei file di configurazione. Questo è richiesto 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 nel 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 AI 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 con il 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 del client istantaneo, impostare il parametro config_dir quando si chiama oracledb.init_oracle_client.

    Linux

    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")
    

    Windows

    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 specifiche configurazioni proxy. Oracle sconsiglia l'utilizzo di un proxy in un ambiente di produzione a causa del possibile impatto sulle prestazioni. Per ulteriori informazioni, vedere HTTPS_PROXY in Oracle Database 19c Database Net Services Reference o Oracle Database 26ai Database Net Services Reference.

In modalità Spessore è 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 Enabling python-oracledb Thick mode.

Contenuto correlato

Informazioni sulla connessione a un database AI autonomo dedicato