年も明けていますが、この記事は OCI Advent Calendar Part2 の Day 2 として書いています。
Oracle Cloud Infrastructure Advent Calendar 2021
https://qiita.com/advent-calendar/2021/oci
Oracle Database 19c(正確には18c以降) では tnsnames.ora に HTTPS_PROXY, HTTPS_PROXY_PORTパラメータ が追加されていて、HTTPプロキシ経由での接続が可能になりました。
Oracle Database Database Net Servicesリファレンス 19c
6.7.2 HTTPS_PROXY
https://docs.oracle.com/cd/F19136_01/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-C672E92D-CE32-4759-9931-92D7960850F7
:
18cより前のバージョンのOracle Clientでは、HTTPプロキシを介した接続はサポートされません。
:
6.7.3 HTTPS_PROXY_PORT
https://docs.oracle.com/cd/F19136_01/netrf/local-naming-parameters-in-tns-ora-file.html#GUID-E69D27B7-2B59-4946-89B3-5DDD491C2D9A
:
このパラメータはHTTPS_PROXY_PORTとともに使用してください。
:
この記事では、これらのパラメータを使用してHTTPプロキシ経由で Oracle Database に接続してみます。
PC ⇒ Proxy ⇒ 踏み台(Public Subnet) ⇒ DB(Private Subnet)
1. tnsnames.ora にパラメータを記述してHTTPプロキシ経由接続
tnsnames.ora に下記を記述します。なお環境の都合で https ではなく http で記述……。
LOCAL_AYUPDB01=(
DESCRIPTION=
(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=1)
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=11521)(HTTP_PROXY=www.proxy.com)(HTTP_PROXY_PORT=80))
)
(CONNECT_DATA=(SERVICE_NAME=ayupdb01.ayusubnet01.ayuvcn01.oraclevcn.com))
)
この接続文字列で Oracle Database に接続してみます。Client PC(Windows) の PowerShell で接続してみます。
$env:ORACLE_HOME = "C:\tools\OracleInstantClient19c"
$env:TNS_ADMIN = "C:\tools\OracleInstantClient19c"
cd C:\tools\OracleInstantClient19c
./sqlplus /nolog
CONNECT AYSHIBAT/xxxxxxxxxxxxxxxxx@LOCAL_AYUPDB01
SELECT NAME FROM V$CONTAINERS;
Disconnected from Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.12.0.0.0
PS C:\tools\OracleInstantClient19c> $env:ORACLE_HOME = "C:\tools\OracleInstantClient19c"
PS C:\tools\OracleInstantClient19c> $env:TNS_ADMIN = "C:\tools\OracleInstantClient19c"
PS C:\tools\OracleInstantClient19c> cd C:\tools\OracleInstantClient19c
PS C:\tools\OracleInstantClient19c> ./sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 5 12:13:27 2022
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
SQL> CONNECT AYSHIBAT/xxxxxxxxxxxxxxxxx@LOCAL_AYUPDB01
Connected.
SQL> SELECT NAME FROM V$CONTAINERS;
NAME
--------------------------------------------------------------------------------
AYUPDB01
SQL>
上手く行きました。
2. 簡易接続プラスで簡易接続文字列にパラメータを記述してHTTPプロキシ経由接続
Oracle Database 19c では 簡易接続プラス という機能が追加されていて、簡易接続文字列にパラメータを記述できるようになりました。
Oracle Database Net Services管理者ガイド 19c
8.1.1 簡易接続プラスについて
https://docs.oracle.com/cd/F19136_01/netag/configuring-naming-methods.html#GUID-8C85D289-6AF3-41BC-848B-BF39D32648BA
:
名前/値ペア: 簡易接続アダプタは、名前と値のペアのリストを受け入れることができます。
名前/値の各ペアは、DESCRIPTIONレベルのパラメータとして追加されます。
:
HTTP_PROXY と HTTP_PROXY_PORT を記述した下記の簡易接続文字列で接続してみます。
CONNECT AYSHIBAT/xxxxxxxxxxxxxxxxx@//localhost:11521/ayupdb01.ayusubnet01.ayuvcn01.oraclevcn.com?HTTP_PROXY=www.proxy.com?HTTP_PROXY_PORT=80
Client PC(Windows) の PowerShell で実行します。
$env:ORACLE_HOME = "C:\tools\OracleInstantClient19c"
cd C:\tools\OracleInstantClient19c
./sqlplus /nolog
CONNECT AYSHIBAT/xxxxxxxxxxxxxxxxx@//localhost:11521/ayupdb01.ayusubnet01.ayuvcn01.oraclevcn.com?HTTP_PROXY=www.proxy.com?HTTP_PROXY_PORT=80
SELECT NAME FROM V$CONTAINERS;
PS C:\Users\AYSHIBAT> $env:ORACLE_HOME = "C:\tools\OracleInstantClient19c"
PS C:\Users\AYSHIBAT> cd C:\tools\OracleInstantClient19c
PS C:\tools\OracleInstantClient19c> ./sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 5 12:14:55 2022
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
SQL> CONNECT AYSHIBAT/xxxxxxxxxxxxxxxxx@//localhost:11521/ayupdb01.ayusubnet01.ayuvcn01.oraclevcn.com?HTTP_PROXY=www.proxy.com?HTTP_PROXY_PORT=80
Connected.
SQL> SELECT NAME FROM V$CONTAINERS;
NAME
--------------------------------------------------------------------------------
AYUPDB01
SQL>
これも上手く行きました。
3. JDBC URL(JDBC接続文字列)でHTTPプロキシ経由接続
JDBC URL(JDBC接続文字列)でHTTPプロキシ経由で接続してみます。
tnsnames.ora に記述する内容をほぼそのまま記述します。
※実際には1行で記述
jdbc:oracle:thin:@(
DESCRIPTION=
(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=1)
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=11521)(HTTP_PROXY=www.proxy.com)(HTTP_PROXY_PORT=80))
)
(CONNECT_DATA=(SERVICE_NAME=ayupdb01.ayusubnet01.ayuvcn01.oraclevcn.com))
)
SQL Developer の カスタムJDBC URL でテストをしてみます。
解り辛いですが「ステータス:成功」で接続に成功しました。
4. まとめ
新年明けの小ネタです。プロキシ経由接続も簡易接続プラスもどんどん活用して下さいね。
彡(^)(^)
追記. 参考ドキュメント
http_proxyパラメータは下記ドキュメントに記載があるので、MOS にアクセス可能な方はご覧ください。
彡(゚)(゚)
Parameters Added on Oracle 19c(19.3) but not Included in Reference (Doc ID 2559592.1)
https://mosemp.us.oracle.com/epmos/faces/DocumentDisplay?id=2559592.1