LoginSignup
3
5

More than 1 year has passed since last update.

Oracle Database の HTTPS_PROXY(HTTP_PROXY), HTTPS_PROXY_PORT(HTTP_PROXY_PORT) を使用してプロキシサーバー経由でDB接続してみる。(tnsnames.ora, 簡易接続プラス, JDBC URL)

Last updated at Posted at 2022-01-05

年も明けていますが、この記事は 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 でテストをしてみます。
proxy01.jpg

解り辛いですが「ステータス:成功」で接続に成功しました。

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

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5