使用 mTLS 連線 Python 應用程式

適用於:適用 僅限 Exadata Cloud@Customer

您可以使用 mTLS 將 Python 應用程式連線至您的 Autonomous Database 執行處理

連線 Python 應用程式使用 mTLS 可增強認證和加密的安全性,並使用用戶端證明資料 (提供使用者名稱和密碼) 強制實施安全性。

python-oracledb 驅動程式的預設「精簡模式」會直接連線至 Oracle Database。驅動程式可選擇性地使用 Oracle Client 程式庫「厚模式」來提供一些額外功能。Oracle Client 程式庫可以是 Oracle Instant Client、完整的 Oracle Client 或 Oracle Database 安裝。

請依照下列步驟,使用 mTLS 將您的 Python 應用程式連線至 Autonomous Database 執行處理:

  1. 安裝 Python 和 python- oracledb 驅動程式
  2. 取得安全證明資料 (Oracle Wallet) 並啟用網路連線
  3. 如果您只想以「精簡」模式連線,請執行此步驟:使用 python-oracledb Thin 模式 (mTLS) 執行 Python 應用程式
  4. 若要以 Thick 模式連線,請執行此步驟:使用 python-oracledb Thick 模式 (mTLS) 執行 Python 應用程式

安裝 Python 和 python- oracledb 驅動程式

若要從您的 Python 應用程式連線到 Autonomous Database ,請安裝 Python 和 python-oracledb 驅動程式。

  1. 如果 Python 3 尚未推出,請安裝。

    您使用的 Python 版本取決於用戶端作業系統和硬體。例如 Windows、Linux、macOS 以及其他。

    附註:

    Oracle 建議您隨時更新 Python 和 python-oracledb 驅動程式版本。
  2. PyPI 安裝 python-oracledb 驅動程式。

    python-oracledb 驅動程式是 Python 程式設計語言的延伸模組,可讓 Python 程式連線至 Oracle Database。python-oracledb 驅動程式是常用 cx_Oracle 驅動程式中已重新命名的新主要發行版本。

    支援的 python-oracledb 驅動程式版本:python-oracledb 1.0 (或更新版本)

    執行下列命令以升級 python:

    python -m pip install oracledb --upgrade

    您應該會看到類似以下的執行結果:

    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

    安裝 python-oracledb 的備註:

    • 如果您位於代理後方,請使用 --proxy 選項將代理伺服器增加到指令中。舉例而言:

      python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80
    • 如果您沒有寫入系統目錄的權限,請包含 --user 選項。舉例而言:

      python -m pip install oracledb --upgrade --user
    • 如果您的平台沒有二進位套件,執行 pip 將會改為下載來源套件。編譯來源並安裝產生的二進位檔。

    如需其他選項和秘訣,請參閱 Installing python-oracledb

  3. 若要在 Thick 模式中使用 python-oracledb 驅動程式,請安裝 Oracle 用戶端軟體。

    依照預設,python-oracledb 會以「精簡」模式執行,並直接連線至 Oracle Database。精簡模式不需要 Oracle Client 程式庫。但是,當 python-oracledb 以 Thick 模式執行時,可以使用某些額外功能。

    附註:

    請參閱 python-oracledb 支援的 Oracle Database 功能,瞭解 python-oracledb Thin 和 Thick 模式支援的功能資訊。Autonomous Database 並未提供此連結中顯示的所有功能。

    當您使用 Oracle Instant 從屬端程式庫或 Oracle Database 從屬端程式庫,並在 Python 程式碼中呼叫 oracledb.init_oracle_client() 時,Python-oracledb 會使用 Thick 模式。

    當您安裝 Oracle 用戶端軟體時,mTLS 與 TLS 連線所需的最低版本會有差異,如下所示:

    • Mutual TLS (mTLS) Connections :

      • 如果您的資料庫位於遠端電腦上,請為您的作業系統架構下載免費的 Oracle Instant Client 「基本」或「基本光」套裝軟體。使用支援的版本:Oracle Instant Client :18.19 (或更新版本)、19.2 (或更新版本) 或 21 (基本版本或更新版本)。

      • 或者,您可以在系統上使用完整 Oracle Database 從屬端程式庫 (包括完整 Oracle Database 從屬端:Oracle Database 從屬端:18.19 (或更新版本)、19.2 (或更新版本),或 21 (基本版本或更新版本)。

    • TLS 連線:如果您使用下列從屬端版本,則 Oracle Call Interface (OCI) 從屬端支援 TLS 認證:

      • Oracle Instant Client/Oracle Database Client 19.14 (或更新版本) 和 21.5 (或更新版本) - 所有平台
      • 或者,您可以在您的系統上使用完整 Oracle Database 從屬端程式庫,包括完整 Oracle Database 從屬端 19.14 (或更新版本) 和 21.5 (或更新版本)。

取得安全證明資料 (Oracle Wallet) 並啟用網路連線

取得從屬端安全證明資料以連線至 Autonomous Database 執行處理。

  1. Autonomous Database 執行處理下載公事包檔案,以取得包含存取 Autonomous Database 執行處理所需之從屬端安全證明資料和網路組態設定值的壓縮檔。

    取得從屬端安全證明資料 (wallet.zip 檔案):

    • ADMIN 使用者:在 Oracle Cloud Infrastructure 主控台上,按一下資料庫連線。請參閱下載從屬端證明資料 (公事包)

    • 其他使用者 (非管理員):從 Autonomous Database 執行處理的管理員取得 Oracle Wallet。

    附註:

    保護 wallet.zip 檔案及其內容,以防止未經授權的資料庫存取。
  2. 解壓縮從屬端證明資料檔案 (wallet.zip)。

以 python-oracledb 精簡模式 (mTLS) 執行 Python 應用程式

依照預設,python-oracledb 會使用「精簡」模式直接連線至您的 Autonomous Database 執行處理。

在「精簡」模式中,只需要兩個來自公事包壓縮檔的檔案:

  • tnsnames.ora:將用於應用程式連線字串的網路服務名稱對應至您的資料庫服務。

  • ewallet.pem:以精簡模式啟用 SSL/TLS 連線。

以精簡模式連線:

  1. tnsnames.oraewallet.pem 檔案移至系統上的位置。

    例如,在 Linux 上:

    /opt/OracleCloud/MYDB

    例如,在 Windows 系統上:

    C:\opt\OracleCloud\MYDB
  2. 在您的 Python 應用程式中,設定下列連線參數以連線至 Autonomous Database 執行處理:
    • config_dir:指定包含 tnsnames.ora 的目錄。
    • dsn:用來從 tnsnames.ora 檔案指定想要的網路別名。
    • password:指定資料庫使用者密碼。
    • user:指定資料庫使用者。
    • wallet_location:指定包含 PEM 檔案 (ewallet.pem) 的目錄。
    • wallet_password:指定 PEM 檔案的密碼 (ewallet.pem)。您在下載 wallet.zip 檔案時設定此密碼。

    例如,在 Linux 上使用 oracledb.connectdb2024_low 網路服務名稱 (在 tnsnames.ora 中找到服務名稱) 以 ADMIN 使用者身分連線:

    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 上使用含有 db2024_low 網路服務名稱的 oracledb.connect,以 ADMIN 使用者身分連線 (服務名稱可在 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)

    使用 'raw' 字串 r"..." 表示將反斜線視為目錄分隔符號。

    如本範例所示,wallet_locationconfig_dir 設為相同的目錄 (且目錄包含 tnsnames.oraewallet.pem)。不需要為這些檔案指定相同的目錄。

如果您位於防火牆之後,可以使用連線描述區中的 HTTPS_PROXY 或設定連線屬性,透過代理主機通道 TLS/SSL 連線。成功的連線取決於特定的代理主機組態。由於對效能的可能影響,Oracle 不建議在生產環境中使用代理主機。請參閱 Oracle Database 19c Database Net Services Reference 中的 HTTPS_PROXYOracle Database 23ai Database Net Services Reference ,瞭解詳細資訊。

在「精簡」模式中,您可以新增 https_proxyhttp_proxy_port 參數來指定代理主機。

例如,在 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)

例如,在 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- oracledb Thick 模式執行 Python 應用程式 (mTLS)

python-oracledb 預設會以「精簡」模式執行,並直接連線至 Oracle Database。當驅動程式以 Thick 模式執行時,可以使用額外的 python-oracledb 功能。

附註:

執行 Python 時,需要安裝 Oracle Client 程式庫。您也必須在 Python 程式碼中呼叫 oracledb.init_oracle_client()

在 Thick 模式下,必須從公事包壓縮檔執行下列三個檔案:

  • tnsnames.ora:包含用於應用程式連線字串的網路服務名稱,並將字串對應至您的資料庫服務。

  • sqlnet.ora:指定 SQL*Net 從屬端組態。

  • cwallet.sso:包含自動開啟的 SSO 公事包。

在 Thick 模式下連線:

  1. 將檔案 tnsnames.orasqlnet.oracwallet.sso 放置在您的系統上。

    請使用兩個選項中的其中一個來將這些檔案放置在您的系統上:

    • 如果您使用 Instant Client,請將檔案移至 Instant Client 目錄下的 network/admin 子目錄階層。例如,根據架構或用戶端系統以及安裝 Instant Client 的位置,這些檔案應該放置在目錄位置,例如:

      /home/myuser/instantclient_19_21/network/admin

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

      例如,在 Linux 中,如果您使用完整的 Oracle Client,請將檔案移至 $ORACLE_HOME/network/admin

    • 或者,將檔案移至任何可存取的目錄。

      例如,在 Linux 上,將檔案移至目錄 /opt/OracleCloud/MYDB,然後編輯 sqlnet.ora,將公事包位置目錄變更為包含 cwallet.sso 檔案的目錄。

      例如,在 Linux 上編輯 sqlnet.ora,如下所示:

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

      當組態檔不在預設位置中時,您的應用程式需要使用 oracledb.init_oracle_client() 呼叫中的 config_dir 參數或設定 TNS_ADMIN 環境變數來指示它們的位置。

      附註:

      這些設定值都不需要進行,如果您將所有組態檔都放在 network/admin 目錄中,就不需要編輯 sqlnet.ora
  2. 在您的 Python 應用程式中,設定下列初始化和連線參數以連線至 Autonomous Database 執行處理:
    • config_dir:指定放置組態檔時的組態目錄。只有在配置檔案放置在即時用戶端配置目錄 network/admin 以外的目錄中時,才需要此設定。
    • dsn:從 tnsnames.ora 檔案指定想要的網路別名。
    • password:指定資料庫使用者密碼。
    • user:指定資料庫使用者。

    在配置檔案的第一個案例中,透過將 dsn 參數設為 tnsnames.ora 所需的網路別名,使用您的資料庫證明資料連線至 Autonomous Database 執行處理。

    例如,若要使用 oracledb.init_oracle_client 以 ADMIN 使用者身分連線,並使用 db2024_low 網路服務名稱連線 (在 tnsnames.ora 中找到服務名稱的位置):

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

    當組態檔位於即時從屬端組態目錄以外的目錄中時,請在呼叫 oracledb.init_oracle_client 時設定 config_dir 參數。

    例如,在 Linux 上,使用 db2024_low 網路服務名稱以 ADMIN 使用者身分連線:

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

    例如,在 Windows 上使用 db2024_low 網路服務名稱,以 ADMIN 使用者身分連線:

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

    使用 'raw' 字串 r"..." 表示將反斜線視為目錄分隔符號。

如果您位於防火牆之後,可以使用連線描述區中的 HTTPS_PROXY 或設定連線屬性,透過代理主機通道 TLS/SSL 連線。成功的連線取決於特定的代理主機組態。由於對效能的可能影響,Oracle 不建議在生產環境中使用代理主機。請參閱 Oracle Database 19c Database Net Services Reference 中的 HTTPS_PROXYOracle Database 23ai Database Net Services Reference ,瞭解詳細資訊。

在 Thick 模式下,您可以編輯 sqlnet.ora 檔案並新增一行來指定代理主機:

SQLNET.USE_HTTPS_PROXY=on

此外,編輯 tnsnames.ora,並將 HTTPS_PROXY 代理主機名稱和 HTTPS_PROXY_PORT 連接埠新增至您計畫使用之任何服務名稱的連線描述區位址清單。

舉例而言:

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

如需「粗」模式的資訊,請參閱啟用 python-oracledb Thick 模式