Python-Anwendungen mit mTLS verbinden

Gilt nur für: Anwendbar Exadata Cloud@Customer

Sie können Python-Anwendungen mit mTLS mit Ihrer Autonomous Database-Instanz verbinden.

Die Verbindung einer Python-Anwendung mit mTLS bietet erweiterte Sicherheit für Authentifizierung und Verschlüsselung. Die Sicherheit wird dabei mit Clientzugangsdaten durchgesetzt ( indem ein Benutzername und Kennwort angegeben wird).

Der standardmäßige "Thin-Modus" des Treibers python-oracledb stellt eine direkte Verbindung zu Oracle Database her. Der Treiber kann optional Oracle-Client-Librarys im "Thick-Modus" für zusätzliche Funktionen verwenden. Die Oracle-Client-Librarys können von Oracle Instant Client, dem vollständigen Oracle-Client oder von einer Oracle Database-Installation stammen.

So verbinden Sie Ihre Python-Anwendung mit mTLS mit einer Autonomous Database-Instanz:

  1. Python und den python-oracledb-Treiber installieren
  2. Sicherheitszugangsdaten (Oracle Wallet) abrufen und Netzwerkkonnektivität aktivieren
  3. Führen Sie diesen Schritt aus, wenn Sie nur im Thin-Modus eine Verbindung herstellen möchten: Python-Anwendung mit python-oracledb-Thin-Modus (mTLS) ausführen
  4. Führen Sie diesen Schritt aus, wenn Sie die Verbindung im Thick-Modus herstellen möchten: Python-Anwendung mit python-oracledb-Thick-Modus (mTLS) ausführen

Python und den python-oracledb-Treiber installieren

Um von Ihrer Python-Anwendung eine Verbindung zu Autonomous Database herzustellen, installieren Sie Python und den python-oracledb-Treiber.

  1. Installieren Sie Python 3, wenn es noch nicht verfügbar ist.

    Die verwendete Python-Version hängt von Ihrem clientseitigen Betriebssystem und Ihrer clientseitigen Hardware ab. Beispiel: Windows, Linux, macOS und andere.

    Hinweis:

    Oracle empfiehlt, mit den Treiberreleases Python und python-oracledb auf dem Laufenden zu bleiben.
  2. Installieren Sie den python-oracledb-Treiber von PyPI.

    Der python-oracledb-Treiber ist ein Erweiterungsmodul der Python-Programmiersprache, mit dem Python-Programme eine Verbindung zu Oracle Database herstellen können. Der python-oracledb-Treiber ist die umbenannte, neue Hauptversion des beliebten cx_Oracle-Treibers.

    Unterstützte python-oracledb-Treiberversionen: python-oracledb 1.0 (oder höher)

    Führen Sie den folgenden Befehl aus, um Python upzugraden:

    python -m pip install oracledb --upgrade

    Daraufhin sollte in etwa folgende Ausgabe angezeigt werden:

    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

    Hinweise zur Installation von python-oracledb:

    • Wenn Sie sich hinter einem Proxy befinden, verwenden Sie die Option --proxy, um dem Befehl einen Proxyserver hinzuzufügen. Beispiel:

      python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80
    • Wenn Sie nicht zum Schreiben in Systemverzeichnisse berechtigt sind, fügen Sie die Option --user hinzu. Beispiel:

      python -m pip install oracledb --upgrade --user
    • Wenn für Ihre Plattform kein Binärpackage verfügbar ist, wird stattdessen das Quellpackage durch Ausführen von pip heruntergeladen. Die Quelle wird kompiliert, und die resultierende Binärdatei wird installiert.

    Weitere Optionen und Tipps finden Sie unter Installing python-oracledb.

  3. Wenn Sie den python-oracledb-Treiber im Thick-Modus verwenden möchten, installieren Sie die Oracle-Clientsoftware.

    Standardmäßig wird python-oracledb im Thin-Modus ausgeführt, mit dem eine direkte Verbindung zu Oracle Database hergestellt wird. Im Thin-Modus sind keine Oracle-Client-Librarys erforderlich. Einige zusätzliche Funktionen sind jedoch verfügbar, wenn python-oracledb im Thick-Modus ausgeführt wird.

    Hinweis:

    Informationen zu unterstützten Features im Thin- und Thick-Modus von python-oracledb finden Sie unter Oracle Database Features Supported by python-oracledb. Nicht alle unter diesem Link angezeigten Features sind mit Autonomous Database verfügbar.

    Python-oracledb verwendet den Thick-Modus, wenn Sie entweder die Oracle Instant Client-Librarys oder die Oracle Database-Client-Librarys verwenden und oracledb.init_oracle_client() in Ihrem Python-Code aufrufen.

    Bei der Installation der Oracle-Clientsoftware bestehen folgende Unterschiede in den erforderlichen Mindestversionen für mTLS- und TLS-Verbindungen:

    • Wechselseitige TLS-(mTLS-)Verbindungen:

      • Wenn sich Ihre Datenbank auf einem Remoterechner befindet, laden Sie das kostenlose Oracle Instant Client-Package "Basic" oder "Basic Light" für Ihre Betriebssystemarchitektur herunter. Verwenden Sie eine unterstützte Version: Oracle Instant Client: 18.19 (oder höher), 19.2 (oder höher) oder 21 (Basisrelease oder höher).

      • Alternativ können Sie die vollständigen Oracle Database-Client-Librarys verwenden, wenn diese auf Ihrem System verfügbar sind (einschließlich des vollständigen Oracle Database-Clients: Oracle Database-Client: 18.19 (oder höher), 19.2 (oder höher) oder 21 (Basisrelease oder höher).

    • TLS-Verbindungen: Oracle Call Interface-(OCI-)Clients unterstützen die TLS-Authentifizierung, wenn Sie die folgenden Clientversionen verwenden:

      • Oracle Instant Client/Oracle Database-Client 19.14 (oder höher) und 21.5 (oder höher) - alle Plattformen
      • Alternativ können Sie die vollständigen Oracle Database-Client-Librarys verwenden, wenn diese auf Ihrem System verfügbar sind, einschließlich des vollständigen Oracle Database-Clients 19.14 (oder höher) bzw. 21.5 (oder höher).

Sicherheitszugangsdaten (Oracle Wallet) abrufen und Netzwerkkonnektivität aktivieren

Rufen Sie die Clientsicherheitszugangsdaten ab, um eine Verbindung zu einer Autonomous Database-Instanz herzustellen.

  1. Wählen Sie eine Wallet-Datei von der Autonomous Database-Instanz aus, um eine ZIP-Datei mit den Clientsicherheitszugangsdaten und den Netzwerkkonfigurationseinstellungen für den Zugriff auf eine Autonomous Database-Instanz herunterzuladen.

    Ermitteln Sie die Sicherheitszugangsdaten des Clients (Datei wallet.zip):

    • ADMIN-Benutzer: Klicken Sie in der Oracle Cloud Infrastructure-Konsole auf Datenbankverbindung. Siehe Clientzugangsdaten (Wallets) herunterladen.

    • Sonstiger Benutzer (kein Administrator): Beziehen Sie das Oracle Wallet vom Administrator für die Autonomous Database-Instanz.

    Hinweis:

    Schützen Sie die Datei wallet.zip und ihren Inhalt, um einen nicht autorisierten Datenbankzugriff zu verhindern.
  2. Dekomprimieren Sie die Clientzugangsdatendatei (wallet.zip).

Python-Anwendung mit python-oracledb-Thin-Modus (mTLS) ausführen

Standardmäßig verwendet python-oracledb den Thin-Modus, um eine direkte Verbindung zur Autonomous Database-Instanz herzustellen.

Im Thin-Modus werden nur zwei Dateien aus der Wallet-ZIP-Datei benötigt:

  • tnsnames.ora: Ordnet den Datenbankservices Netzwerkservicenamen, die für Anwendungsverbindungszeichenfolgen verwendet werden, zu.

  • ewallet.pem: Ermöglicht SSL-/TLS-Verbindungen im Thin-Modus.

So melden Sie sich im Thin-Modus an:

  1. Verschieben Sie die Dateien tnsnames.ora und ewallet.pem in ein Verzeichnis auf Ihrem System.

    Beispiel unter Linux:

    /opt/OracleCloud/MYDB

    Beispiel für Windows:

    C:\opt\OracleCloud\MYDB
  2. Geben Sie in der Python-Anwendung die folgenden Verbindungsparameter für die Verbindung mit einer Autonomous Database-Instanz an:
    • config_dir: Gibt das Verzeichnis an, in dem tnsnames.ora enthalten ist.
    • dsn: Geben Sie den gewünschten Netzwerkalias aus der Datei tnsnames.ora an.
    • password: Gibt das Kennwort des Datenbankbenutzers an.
    • user: Gibt den Datenbankbenutzer an.
    • wallet_location: Gibt das Verzeichnis an, das die PEM-Datei enthält (ewallet.pem).
    • wallet_password: Gibt das Kennwort für die PEM-Datei (ewallet.pem) an. Sie legen dieses Kennwort fest, wenn Sie die Datei wallet.zip herunterladen.

    Beispiel: Unter Linux melden Sie sich als ADMIN-Benutzer mit oracledb.connect und dem Netzwerkservicenamen db2024_low an (der Servicename befindet sich 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)

    Beispiel: Unter Windows können Sie sich als ADMIN-Benutzer mit oracledb.connect und dem Netzwerkservicenamen db2024_low anmelden (der Servicename befindet sich 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)

    Die Verwendung einer 'raw'-Zeichenfolge r"..." bedeutet, dass umgekehrte Schrägstriche als Verzeichnistrennzeichen behandelt werden.

    Wie in diesem Beispiel gezeigt, sind wallet_location und config_dir auf dasselbe Verzeichnis gesetzt (und das Verzeichnis enthält tnsnames.ora und ewallet.pem. Für diese Dateien muss nicht dasselbe Verzeichnis angegeben werden.

Wenn Sie sich hinter einer Firewall befinden, können Sie TLS-/SSL-Verbindungen über einen Proxy tunneln, indem Sie HTTPS_PROXY im Verbindungsdeskriptor verwenden oder Verbindungsattribute festlegen. Erfolgreiche Verbindung hängt von bestimmten Proxykonfigurationen ab. Oracle empfiehlt die Verwendung eines Proxys in einer Produktionsumgebung aufgrund der möglichen Auswirkung auf die Performance nicht. Weitere Informationen finden Sie unter HTTPS_PROXY in der Oracle Database 19c Database Net Services Reference oder in der Oracle Database 23ai Database Net Services Reference.

Im Thin-Modus können Sie einen Proxy angeben, indem Sie die Parameter https_proxy und http_proxy_port hinzufügen.

Beispiel unter 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)

Beispiel für 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)

Python-Anwendung mit python-oracledb-Thick-Modus (mTLS) ausführen

Standardmäßig wird python-oracledb im Thin-Modus ausgeführt, mit dem eine direkte Verbindung zu Oracle Database hergestellt wird. Bei der Ausführung des Treibers im Thick-Modus sind zusätzliche python-oracledb-Features verfügbar.

Hinweis:

Der Thick-Modus erfordert, dass die Oracle-Client-Librarys dort installiert sind, wo Sie Python ausführen. Außerdem müssen Sie oracledb.init_oracle_client() in Ihrem Python-Code aufrufen.

Im Thick-Modus sind die folgenden drei Dateien aus der Wallet-ZIP-Datei erforderlich:

  • tnsnames.ora: Enthält die Netzwerkservicenamen, die für Anwendungsverbindungszeichenfolgen verwendet werden, und ordnet die Zeichenfolgen den Datenbankservices zu.

  • sqlnet.ora: Gibt die clientseitige SQL*Net-Konfiguration an.

  • cwallet.sso: Enthält das automatisch geöffnete SSO-Wallet.

So melden Sie sich im Thick-Modus an:

  1. Speichern Sie die Dateien tnsnames.ora, sqlnet.ora und cwallet.sso in Ihrem System.

    Verwenden Sie eine von zwei Optionen, um diese Dateien auf Ihrem System zu speichern:

    • Wenn Sie Instant Client verwenden, verschieben Sie die Dateien in eine Unterverzeichnishierarchie network/admin unter dem Instant Client-Verzeichnis. Abhängig von der Architektur oder Ihrem Clientsystem und dem Ort, an dem Sie Instant Client installiert haben, sollten sich die Dateien in einem Verzeichnis wie dem folgenden befinden:

      /home/myuser/instantclient_19_21/network/admin

      oder

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

      Beispiel: Wenn Sie unter Linux den vollständigen Oracle-Client verwenden, verschieben Sie die Dateien in $ORACLE_HOME/network/admin.

    • Alternativ können Sie die Dateien in ein jedes zugängliche Verzeichnis verschieben.

      Beispiel: Unter Linux verschieben Sie die Dateien in das Verzeichnis /opt/OracleCloud/MYDB, und bearbeiten Sie sqlnet.ora, um das Wallet-Verzeichnis in das Verzeichnis zu ändern, das die Datei cwallet.sso enthält.

      Beispiel: Bearbeiten Sie unter Linux sqlnet.ora wie folgt:

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

      Wenn sich die Konfigurationsdateien nicht im Standardverzeichnis befinden, muss Ihre Anwendung entweder mit dem Parameter config_dir im Aufruf oracledb.init_oracle_client() oder durch Festlegen der Umgebungsvariablen TNS_ADMIN angeben, wo sie sich befinden.

      Hinweis:

      Keine dieser Einstellungen ist erforderlich. Wenn Sie alle Konfigurationsdateien in das Verzeichnis network/admin einfügen, müssen Sie sqlnet.ora nicht bearbeiten.
  2. Wählen Sie in der Python-Anwendung die folgenden Initialisierungs- und Verbindungsparameter für die Verbindung mit der Autonomous Database-Instanz aus:
    • config_dir: Gibt das Konfigurationsverzeichnis an, wenn Sie die Konfigurationsdateien speichern. Dies ist nur erforderlich, wenn die Konfigurationsdateien in einem Verzeichnis außerhalb des Instant Client-Konfigurationsverzeichnisses network/admin abgelegt werden.
    • dsn: Gibt den gewünschten Netzwerkalias aus der Datei tnsnames.ora an.
    • password: Gibt das Kennwort des Datenbankbenutzers an.
    • user: Gibt den Datenbankbenutzer an.

    Melden Sie sich im ersten Fall für die Platzierung der Konfigurationsdateien mit Ihren Datenbankzugangsdaten bei der Autonomous Database-Instanz an, indem Sie den Parameter dsn auf den gewünschten Netzwerkalias aus tnsnames.ora setzen.

    Beispiel: So melden Sie sich als ADMIN-Benutzer mit oracledb.init_oracle_client an, und stellen Sie eine Verbindung mit dem Netzwerkservicenamen db2024_low her (wobei der Servicename in tnsnames.ora enthalten ist):

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

    Wenn sich Konfigurationsdateien in einem Verzeichnis außerhalb des Instant Client-Konfigurationsverzeichnisses befinden, legen Sie den Parameter config_dir fest, wenn Sie oracledb.init_oracle_client aufrufen.

    Beispiel: Unter Linux, um als ADMIN-Benutzer mit dem Netzwerkservicenamen db2024_low anzumelden:

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

    Beispiel: Unter Windows können Sie sich als ADMIN-Benutzer mit dem Netzwerkservicenamen db2024_low anmelden:

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

    Die Verwendung einer 'raw'-Zeichenfolge r"..." bedeutet, dass umgekehrte Schrägstriche als Verzeichnistrennzeichen behandelt werden.

Wenn Sie sich hinter einer Firewall befinden, können Sie TLS-/SSL-Verbindungen über einen Proxy tunneln, indem Sie HTTPS_PROXY im Verbindungsdeskriptor verwenden oder Verbindungsattribute festlegen. Erfolgreiche Verbindung hängt von bestimmten Proxykonfigurationen ab. Oracle empfiehlt die Verwendung eines Proxys in einer Produktionsumgebung aufgrund der möglichen Auswirkung auf die Performance nicht. Weitere Informationen finden Sie unter HTTPS_PROXY in der Oracle Database 19c Database Net Services Reference oder in der Oracle Database 23ai Database Net Services Reference.

Im Thick-Modus können Sie einen Proxy angeben, indem Sie die Datei sqlnet.ora bearbeiten und eine Zeile hinzufügen:

SQLNET.USE_HTTPS_PROXY=on

Bearbeiten Sie außerdem tnsnames.ora, und fügen Sie für jeden Servicenamen, den Sie verwenden möchten, einen HTTPS_PROXY-Proxynamen und einen HTTPS_PROXY_PORT-Port zur Adressliste des Verbindungsdeskriptors hinzu.

Beispiel:

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

Informationen zum Thick-Modus finden Sie unter Enabling python-oracledb Thick mode.