LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Organization

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

年も明けていますが、この記事は 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 に接続してみます。

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

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
What you can do with signing up
3