Connettere le applicazioni Python con un wallet (mTLS)

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

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

Argomenti

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

  1. Scaricare un file wallet dall'istanza di Autonomous Database per ottenere un file zip contenente 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 Download delle credenziali client (wallet).

    • Altro utente (non amministratore): ottenere l'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. Decomprimere il file delle credenziali client (wallet.zip).

Esegui applicazione Python con modalità Thin python-oracledb con 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: consente di mappare 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 parametri di connessione riportati di seguito per connettersi a un'istanza di Autonomous 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.
    • 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)
    • Ad esempio, su 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.

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à Thick python-oracledb con wallet (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:

  • tnsnames.ora: contiene i nomi di servizio di rete utilizzati per le stringhe di connessione dell'applicazione e mappa le stringhe 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, 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 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 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.

    • 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 specifiche configurazioni proxy. Oracle sconsiglia l'utilizzo di un proxy in un ambiente di produzione a causa del possibile impatto sulle prestazioni.

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.