はじめに
Oracle Autonomous Database 共有Exadata Infrastructure (ADB-S) の Oracle Autonomous Data Warehouse (ADW)を使っているお客様がWallet無し接続を希望されているとのこと。
アプリケーションを詳しく確認すると Excel から Oracle Provider for OLE DB (32bit)を利用されている、とのことでマニュアル等での調査したことおよび実際に確認したことをまとめてみました。
こちらのマニュアル等での調査は 2022/05/21 時点での情報となり、確認した内容は 2022/4/13 時点で情報となりますので、必要に応じてご自身でご確認ください。
ADWへのクライアント・アプリケーションからのTLS接続
マニュアル情報は以下の通り。丁寧にまとまっています。
クライアント・アプリケーションを使用したAutonomous Databaseへの接続
とはいえ若干、記述が英語マニュアルに追いついていないところがありますので以下、英語マニュアルのリンクです。
2 Connecting to Autonomous Database
- JDBC Thin TLS Connections without a Wallet
- Oracle Call Interface (OCI) Connections with TLS Authentication
- Connect Microsoft .NET, Visual Studio Code, and Visual Studio without a Wallet
- Connect Python, Node.js, and other Scripting Languages without a Wallet
また、こちらの図は以前Oracle Directセミナーあたりで説明した資料を修正したものです。こちらの図も参照いただきつつ対応状況をご確認ください。
マニュアル記述の内容をまとめると以下のようになります。
- JDBC Thin ドライバはJDK 8 8u161で対応
- 管理対象ODP.NETドライバについてはバージョンを19.3および21.4以降で対応
- Oracle Call Interface (OCI)の場合はOracle Instant Client 19.13 (Linux x64)、Oracle Instant Client (すべてのプラットフォーム) 19.14以降、21.5以降
さて、Oracle Instant Client は19.14、21.5以降ですべてのプラットフォームでTLS接続に対応しているのですが、現時点(2022/05/21)でどのプラットフォームにて提供されているのかを確認します。
こちらのサイトOracle Instant Client DownloadsよりOracle Instant Client はダウンロードできるため、対応しているプラットフォームと対応しているバージョンを確認してみると以下の通りです。
- Linux x86-64 (64-bit): 19.15, 21.6
- Linux x86(32bit): 19.15
- Microsoft Windows (x64): 19.15
- Microsoft Windows (32bit): 19.15
- Solaris SPARC (64-bit): 19.15
- Solaris x86-64: 19.15
- z/Linux (64-bit): 19.15
さて、ここまではマニュアルをもとに記述しましたが、Oracle Provider for OLE DB (32bit) で TLS接続をおこなうにはどうしたら良いでしょうか。残念なことに Oracle Provider for OLE DB はOracle Instant Client には含まれていないのです。
Oracle Instant Client に含まれているソフトウェアについてはこちらのサイトInstant Client Packagesより確認できます。
端的にいうと、Oracle Call Interface 部分、JDBC OCIドライバ、ODBCドライバのみが含まれています。
なお、オラクル社が提供しているWindows OSを対象とした開発環境を構築するパッケージとしてOracle Data Access Component (ODAC)があります。こちらにはOracle Provider for OLE DBは含まれているものの、残念ながらこちらはバージョンが古いもの(18.3)しか提供されていません。
Download Additional ODAC, ODP.NET, and Oracle Developer Tools Releases
となると、Oracle Provider for OLE DB (32bit) で TLS接続をおこなうには Oracle Instant Client ではなく、Oracle Clientの製品版(19.3がOracle Software Delivery Cloudよりダウンロード可能)と19.14以降のパッチを適用することになりそうです。
19.14 のWindows Database Bundle Patch
Oracle Support へアクセス可能な方は以下のNoteをご確認ください。
- Oracle Database 19c Proactive Patch Information (Doc ID 2521164.1)
「Oracle Database 19c Release Update」のリンクをクリックしていただくと、「Included in Windows Bundle」よりパッチをダウンロードするリンクが確認できます。
なお、これから記述する内容は4月中旬に確認した内容なので記述は18-Jan-2022の19.14をもとにしたものとなります。本日時点では19-Apr-2022の19.15が提供されているため、こちらを利用することになりそうです。
なお、19.14 のWindows Database Bundle Patch (32bit)の提供タイミングですが、本来2022年1月中旬に提供されるものが2022/3/29に提供されました。私の観測範囲ではInstant Client for Microsoft Windows (32-bit)の19.14提供も4月頭頃だったため、連動していることが推測できます。(あくまでも推測です)
検証とその結果
検証構成はこちらと同等のものを用意しました。Public Subnet の Virtual Machine がWindows Server 2019 となります。
検証の流れは以下となります。すべて用意したWindows Server 2019での作業です。
- Oracle Client 32bit (19.3) を Oracle Software Delivery Cloud よりダウンロードし、インストール(Gold Imageではないもの)
- ATPのWalletを取得
- SQL*PlusでWallet有りでATPへ接続でき、Wallet無しでATPへ接続できないことを確認
- Windows Database Bundle Patch (32bit) をダウンロードし、opatch で適用
- SQL*PlusでWallet無しでATPへ接続できることを確認
- PowerShell(32bit)よりOracle Provider for OLE DB (32bit) 経由でATPへ接続し、SQL実行できることの確認
上記の検証の流れを細かくこちらには記述いたしませんが、結果としては上記の「PowerShell(32bit)よりOracle Provider for OLE DB (32bit) 経由でATPへ接続し、SQL実行できることの確認」はできました。
- 検証で利用したPowerShellのコード(パスワード部分はマスク)
[System.Reflection.Assembly]::LoadWithPartialName("System.Data")
$cs = "Provider=OraOLEDB.Oracle;User ID=admin;Password=xxxx;Data Source=atp20220413_low_nw"
$oraCon = New-Object System.Data.OleDb.OleDbConnection($cs)
$oraCmd = New-Object System.Data.OleDb.OleDbCommand
$oraCon.Open()
$oraCmd.Connection = $oraCon
$oraCmd.CommandText = "SELECT username FROM user_users"
$oraReader = $oraCmd.ExecuteReader()
while ($oraReader.Read())
{
$oraReader["USERNAME"].ToString()
}
$oraCmd.Dispose()
$oraCon.Close()
$oraCon.Dispose()
- 実行状況
PS C:\oracleclient> Get-ChildItem env:
Name Value
---- -----
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\opc\AppData\Roaming
CLIENTNAME MUTATSU-JP
CommonProgramFiles C:\Program Files (x86)\Common Files
CommonProgramFiles(x86) C:\Program Files (x86)\Common Files
CommonProgramW6432 C:\Program Files\Common Files
COMPUTERNAME TEST-WIN
ComSpec C:\Windows\system32\cmd.exe
DriverData C:\Windows\System32\Drivers\DriverData
FPS_BROWSER_APP_PROFILE_STRING Internet Explorer
FPS_BROWSER_USER_PROFILE_ST... Default
HOMEDRIVE C:
HOMEPATH \Users\opc
LOCALAPPDATA C:\Users\opc\AppData\Local
LOGONSERVER \\TEST-WIN
NUMBER_OF_PROCESSORS 2
OS Windows_NT
Path C:\app\client\opc\product\19.0.0\client_1\bin;C:\Windows\system32;C:\Windows;...
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PROCESSOR_ARCHITECTURE x86
PROCESSOR_ARCHITEW6432 AMD64
PROCESSOR_IDENTIFIER AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD
PROCESSOR_LEVEL 25
PROCESSOR_REVISION 0101
ProgramData C:\ProgramData
ProgramFiles C:\Program Files (x86)
ProgramFiles(x86) C:\Program Files (x86)
ProgramW6432 C:\Program Files
PSModulePath C:\Program Files\WindowsPowerShell\Modules;C:\Users\opc\Documents\WindowsPowe...
PUBLIC C:\Users\Public
SESSIONNAME RDP-Tcp#3
SystemDrive C:
SystemRoot C:\Windows
TEMP C:\Users\opc\AppData\Local\Temp\2
TMP C:\Users\opc\AppData\Local\Temp\2
TNS_ADMIN C:\oracleclient\tns_admin01
USERDOMAIN TEST-WIN
USERDOMAIN_ROAMINGPROFILE TEST-WIN
USERNAME opc
USERPROFILE C:\Users\opc
windir C:\Windows
PS C:\oracleclient> C:\oracleclient\test01.ps1
GAC Version Location
--- ------- --------
True v4.0.30319 C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\Sy...
ADMIN
PS C:\oracleclient>
最後に
Oracle Provider for OLE DB (32bit) 経由でATPへWallet無し接続の確認はできました。とはいえ、opatch を使ったパッチ適用が手数がかかることもあり、お客様のClient PCへのOracle Clientの配布する為の良い方法を考える必要がありそうです。