mTLSを使用したPythonアプリケーションの接続
適用先:
Exadata Cloud@Customerのみ
mTLSを使用して、PythonアプリケーションをAutonomous AI Databaseインスタンスに接続できます。
PythonアプリケーションをmTLSで接続すると、認証および暗号化のセキュリティが向上し、クライアント資格証明を使用して(ユーザー名とパスワードを指定することで)セキュリティが適用されます。
python-oracledbドライバのデフォルトの"Thin mode"は、Oracle Databaseに直接接続します。ドライバはオプションで、追加機能のために「Thick mode」の Oracle Clientライブラリを使用できます。Oracle Clientライブラリは、Oracle Instant Client、完全なOracle Client、またはOracle Databaseインストールのいずれかにできます。
mTLSを使用してPythonアプリケーションをAutonomous AI Databaseインスタンスに接続するには、次のステップに従います:
- Pythonおよびpython-oracledbドライバのインストール
- セキュリティ資格証明の取得(Oracle Wallet)およびネットワーク接続の有効化
- シン・モードでのみ接続する場合は、このステップを実行します: python-oracledbシン・モード(mTLS)を使用したPythonアプリケーションの実行
- Thickモードで接続する場合は、このステップを実行します: python-oracledb Thick Mode (mTLS)を使用したPythonアプリケーションの実行
Pythonおよびpython-oracledbドライバのインストール
PythonアプリケーションからAutonomous AI Databaseに接続するには、Pythonおよびpython-oracledbドライバをインストールします。
-
Python 3がまだ使用できない場合は、インストールします。
使用するPythonのバージョンは、クライアント側のOSおよびハードウェアによって異なります。たとえば、Windows、Linux、macOSなどです。
ノート: Oracleでは、Pythonおよびpython-oracledbドライバ・リリースを最新の状態に保つことをお薦めします。
-
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.21python-oracledbのインストールに関するノート:
-
プロキシを使用している場合、
--proxyオプションを使用してコマンドにプロキシ・サーバーを追加します。たとえば:python -m pip install oracledb --upgrade --proxy=http://proxy.example.com:80 -
システム・ディレクトリへの書込み権限がない場合は、
--userオプションを含めます。たとえば:python -m pip install oracledb --upgrade --user -
使用しているプラットフォームでバイナリ・パッケージを使用できない場合、
pipを実行すると、かわりにソース・パッケージがダウンロードされます。ソースがコンパイルされ、結果のバイナリがインストールされます。
その他のオプションおよびヒントは、python-oracledbのインストールを参照してください。
-
-
python-oracledbドライバをThickモードで使用する場合は、Oracle Clientソフトウェアをインストールします。
デフォルトでは、python-oracledbはOracle Databaseに直接接続されるThinモードで実行されます。Thinモードでは、Oracle Clientライブラリは必要ありません。ただし、python-oracledbがThickモードで実行されている場合、いくつかの追加機能を使用できます。
注意: python-oracledbのThinおよびThickモードでサポートされている機能の詳細は、python-oracledbでサポートされるOracle Databaseの機能を参照してください。このリンクに示されているすべての機能をAutonomous AI Databaseで使用できるわけではありません。
python-oracledbでは、Oracle Instantクライアント・ライブラリまたはOracle Database Clientライブラリのいずれかを使用し、Pythonコードで
oracledb.init_oracle_client()を呼び出すと、Thickモードが使用されます。Oracle Clientソフトウェアをインストールする場合、mTLS接続とTLS接続に必要な最小バージョンは次のように異なります:
-
相互TLS (mTLS)接続:
-
データベースがリモート・コンピュータ上にある場合は、使用中のオペレーティング・システム・アーキテクチャ用の無料のOracle Instant Client BasicパッケージまたはBasic Lightパッケージをダウンロードします。サポートされているバージョン: Oracle Instant Client: 18.19 (以上)、19.2 (以上)、または21 (ベース・リリース以上)を使用します。
-
または、システムで使用可能でれば、Oracle Databaseの完全なクライアント・ライブラリを使用できます(完全なOracle Database Client: Oracle Database Client: 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 Client 19.14 (以上)および21.5 (以上)が含まれます。
-
-
セキュリティ資格証明の取得(Oracle Wallet)およびネットワーク接続の有効化
Autonomous AI Databaseインスタンスに接続するためのクライアント・セキュリティ資格証明を取得します。
-
Autonomous AI Databaseインスタンスからウォレット・ファイルをダウンロードして、Autonomous AI Databaseインスタンスへのアクセスに必要なクライアント・セキュリティ資格証明およびネットワーク構成設定を含むZipファイルを取得します。
クライアント・セキュリティ資格証明(
wallet.zipファイル)を取得します。-
ADMINユーザー: Oracle Cloud Infrastructure Consoleで、「データベース接続」をクリックします。クライアント資格証明(ウォレット)のダウンロードを参照してください。
-
他のユーザー(非管理者): Autonomous AI Databaseインスタンスの管理者からOracle Walletを取得します。
ノート:不正なデータベース・アクセスを防ぐために、
wallet.zipファイルとそのコンテンツを保護します。
-
-
クライアント資格証明ファイル(
wallet.zip)を解凍します。
python-oracledbシン・モード(mTLS)を使用したPythonアプリケーションの実行
デフォルトでは、python-oracledbはThinモードを使用してAutonomous AI Databaseインスタンスに直接接続します。
Thinモードでは、ウォレット・チップから2つのファイルのみが必要です。
-
tnsnames.ora: アプリケーション接続文字列に使用されるネット・サービス名をデータベース・サービスにマップします。 -
ewallet.pem: シン・モードでSSL/TLS接続を有効にします。
Thinモードで接続するには:
-
tnsnames.oraおよびewallet.pemファイルをシステム上の場所に移動します。Linux
たとえば、Linuxでは次のようにします。
/opt/OracleCloud/MYDBWindows
たとえば、Windowsでは次のように指定します:
C:\opt\OracleCloud\MYDB -
Pythonアプリケーションで、Autonomous AI Databaseインスタンスに接続するために次の接続パラメータを設定します:
-
config_dir:tnsnames.oraを含むディレクトリを指定します。 -
dsn:tnsnames.oraファイルから目的のネットワーク別名を指定する場合に使用します。 -
password: データベース・ユーザーのパスワードを指定します。 -
user: データベース・ユーザーを指定します。 -
wallet_location: PEMファイル(ewallet.pem)を含むディレクトリを指定します。 -
wallet_password: PEMファイルのパスワード(ewallet.pem)を指定します。このパスワードは、wallet.zipファイルのダウンロード時に設定します。
Linux
たとえば、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
たとえば、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_locationとconfig_dirは同じディレクトリに設定されます(ディレクトリにはtnsnames.oraとewallet.pemが含まれます)。これらのファイルに同じディレクトリを指定する必要はありません。 -
ファイアウォールの内側にある場合は、接続記述子でHTTPS_PROXYを使用するか、接続属性を設定して、プロキシを介してTLS/SSL接続をトンネリングできます。正常に接続できるかどうかは、特定のプロキシ構成によって決まります。Oracleでは、パフォーマンスに影響する可能性があるため、本番環境でプロキシを使用することはお薦めしません。詳細については、『Oracle Database 19c Database Net Servicesリファレンス』のHTTPS_PROXYに関する項または『Oracle Database 26ai Database Net Servicesリファレンス』を参照してください。
シン・モードでは、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)
python-oracledb Thick Mode (mTLS)を使用したPythonアプリケーションの実行
デフォルトでは、python-oracledbはOracle Databaseに直接接続されるThinモードで実行されます。ドライバがThickモードで実行されている場合、追加の python-oracledb機能を使用できます。
ノート: Thickモードでは、Pythonを実行する場所にOracle Clientライブラリがインストールされている必要があります。また、Pythonコードでoracledb.init_oracle_client()をコールする必要があります。
Thickモードでは、ウォレット・チップ・ファイルの次の3つのファイルが必要です。
-
tnsnames.ora: アプリケーション接続文字列に使用されるネット・サービス名を含み、文字列をデータベース・サービスにマッピングします。 -
sqlnet.ora: SQL*Netクライアント側の構成を指定します。 -
cwallet.sso: 自動オープンSSOウォレットが含まれます。
Thickモードで接続するには:
-
ファイル
tnsnames.ora、sqlnet.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を編集する必要はありません。
-
-
Pythonアプリケーションで、Autonomous AI Databaseインスタンスに接続するために、次の初期化パラメータおよび接続パラメータを設定します:
-
config_dir: 構成ファイルを配置するときに、構成ディレクトリを指定します。これは、構成ファイルがインスタント・クライアント構成ディレクトリnetwork/adminの外部のディレクトリに配置されている場合にのみ必要です。 -
dsn:tnsnames.oraファイルから目的のネットワーク別名を指定します。 -
password: データベース・ユーザーのパスワードを指定します。 -
user: データベース・ユーザーを指定します。
構成ファイルを配置する最初のケースでは、
dsnパラメータをtnsnames.oraから目的のネットワーク別名に設定して、データベース資格証明を使用してAutonomous AI 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
たとえば、Linuxでは、
db2024_lowネットワーク・サービス名を使用してADMINユーザーとして接続します。oracledb.init_oracle_client(config_dir="/opt/OracleCloud/MYDB") connection=oracledb.connect( user="admin", password=password, dsn="db2024_low")Windows
たとえば、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リファレンス』のHTTPS_PROXYに関する項または『Oracle Database 26ai Database Net Servicesリファレンス』を参照してください。
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=...)
Thickモードの詳細は、python-oracledb Thickモードの有効化を参照してください。