Connettere le applicazioni Python con un wallet (mTLS)

È possibile connettere le applicazioni Python all'istanza di Autonomous Database con un wallet.

La connessione di un'applicazione Python con un wallet (mTLS) garantisce una 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 un wallet (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 con un wallet (mTLS)
  4. Eseguire questo passo se si desidera connettersi in modalità Spessa: Eseguire l'applicazione Python con la modalità Spessa python-oracledb con un wallet (mTLS)

Temi

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 contiene le credenziali di sicurezza del 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 con un wallet (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. Nell'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.

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à Spessa python-oracledb con un wallet (mTLS)

Per impostazione predefinita, python-oracledb viene eseguito in modalità Thin che si connette direttamente a Oracle Database. Ulteriori funzioni 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 nella posizione 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

      In alternativa

      /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.

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.