機械翻訳について

Wallet (mTLS)を使用したPythonアプリケーションの接続

PythonアプリケーションをAutonomous Databaseインスタンス「ウォレット」に接続できます。

Pythonアプリケーション「ウォレット(mTLS)を使用」を接続すると、認証および暗号化のセキュリティが強化され、(ユーザー名とパスワードを指定して)クライアント資格証明を使用してセキュリティが強制されます。

python-oracledbドライバのデフォルトの「Thin mode」はOracle Databaseに直接接続します。 ドライバはオプションで、追加機能のためにOracle Clientライブラリ「Thick mode」を使用できます。 Oracle Clientライブラリは、Oracle Instant Client、完全なOracle Client、またはOracle Databaseインストールから入手できます。

ウォレット(mTLS)を使用してPythonアプリケーションをAutonomous Databaseインスタンスに接続するには、次のステップに従います:

  1. Pythonおよびpython-oracledbドライバのインストール
  2. セキュリティ資格証明の取得(Oracle Wallet)およびネットワーク接続の有効化
  3. シン・モードでのみ接続する場合は、このステップを実行: Wallet (mTLS)を使用したpython-oracledbシン・モードでのPythonアプリケーションの実行
  4. 厚みモードで接続する場合は、このステップを実行: Wallet (mTLS)を使用したpython-oracledbシック・モードでのPythonアプリケーションの実行

トピック

セキュリティ資格証明の取得(Oracle Wallet)およびネットワーク接続の有効化

Autonomous Databaseインスタンスに接続するために、クライアント・セキュリティ資格証明を取得します。

  1. Autonomous Databaseインスタンスからウォレット・ファイルをダウンロードして、Autonomous Databaseインスタンスへのアクセスに必要なクライアント・セキュリティ資格証明およびネットワーク構成設定を含むzipファイルを取得します。

    クライアントのセキュリティ資格証明(wallet.zipファイル)を取得します:

    ノート:

    wallet.zipファイルとその内容を保護して、不正なデータベース・アクセスを防止します。
  2. クライアント資格証明ファイル(wallet.zip)を解凍します。

Wallet (mTLS)を使用したpython-oracledbシン・モードでのPythonアプリケーションの実行

デフォルトでは、python-oracledbはシン・モードを使用してAutonomous Databaseインスタンスに直接接続します。

シン・モードでは、ウォレットzipの2つのファイルのみが必要です:

  • tnsnames.ora: アプリケーション接続文字列に使用されるネット・サービス名をデータベース・サービスにマップします。

  • ewallet.pem: シン・モードでSSL/TLS接続を有効にします。

Thinモードで接続するには:

  1. tnsnames.oraおよびewallet.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では、db2024_lowネットワーク・サービス名でoracledb.connectを使用してADMINユーザーとして接続します(サービス名は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では、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では本番環境でプロキシを使用することはお薦めしません。

シン・モードでは、https_proxyおよびhttp_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)

Wallet (mTLS)を使用したpython-oracledbシック・モードでのPythonアプリケーションの実行

デフォルトでは、python-oracledbは、Oracle Databaseに直接接続するシン・モードで実行されます。 ドライバがThickモードで実行されている場合、追加のpython-oracledb機能を使用できます。

ノート:

Thickモードでは、Pythonを実行する場所にOracle Clientライブラリがインストールされている必要があります。 Pythonコードでoracledb.init_oracle_client()をコールする必要もあります。

Thickモードでは、ウォレットzipファイルの次の3つのファイルが必要です:

  • tnsnames.ora: アプリケーション接続文字列に使用されるネット・サービス名を含み、文字列をデータベース・サービスにマップします。

  • sqlnet.ora: SQL*Netクライアント側の構成を指定します。

  • cwallet.sso: 自動オープンSSOウォレットが含まれます。

Thickモードで接続するには:

  1. tnsnames.orasqlnet.oraおよびcwallet.ssoファイルをシステムに配置します。

    次の2つのオプションのいずれかを使用して、これらのファイルをシステムに配置します:

    • 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パラメータを設定します。

    たとえば、db2024_lowネットワーク・サービス名を使用してADMINユーザーとして接続するLinuxの場合:

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

    たとえば、db2024_lowネットワーク・サービス名を使用してADMINユーザーとして接続するWindowsの場合:

    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では本番環境でプロキシを使用することはお薦めしません。

厚みモードでは、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モードの有効化」を参照してください。