SSH転送(SSH Tunnel) を設定して、踏み台Compute経由の SQL Developer で Autunomous Database に接続する(OCI, Oralce Cloud Infrastructure)

タイトルの通り、SSH転送(SSH Tunnel)経由 の SQL Developer で Autonomous Database に接続してみるやで。
彡(ﾟ)(ﾟ)

# 1. 構成

構成は下記の通り。

 > PC端末 ⇒ (SSH) ⇒ Compute ⇒ (SQL*Net) ⇒ Autonomous Database

ソフトウェア／サービスのバージョンは以下の通りです。

```
■PC端末
Windows 10
SQL Developer 19.2.0
PuTTY 0.71
Teraterm 4.103

■Compute
VM.Standard2.1
OEL 7.6

■Autonomous Database
18c
```

# 2. Autonomous Database の ACL(Access Control List)設定

Computeインスタンス の Public IP からのみ接続を許可するように、Autonomous Database の ACL(Access Control List) を設定します。
なおスクショはSGW(Service Gatewary)経由のPrivate Networkからの接続を許可する設定も入ってます。

> ハンバーガーメニュー ⇒ ATP or ADW ⇒ DB名クリック ⇒ Action ⇒ Access Control List ⇒ IP Address を記述して Save

参考マニュアルは下記となります。

 > Autonomous Data Warehouseでのアクセス制御リストの設定
 > https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/autonomous-acess-control-list.html#GUID-B6389402-3F4D-45A2-A4DE-EAF1B31D8E50

![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/cbc052cc-ad8b-de29-7415-3bc7e16a42b5.jpeg)


# 3. Autonomous Database のウォレットをダウンロードして PC端末に展開

以下の手順で Autonomous Database の ウォレットをダウンロードします。

 > ハンバーガーボタン > Autonomous Data Warehouse or Transaction Processing > DB名 > DB Connection > Download

![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/bbe29124-e18c-f8ff-b27d-499cfd78dd2c.jpeg)

ダウンロードした Wallet の zip を PC端末で展開します。本記事では C:\tools\wallet\ に展開したものとします。

# 4. PC端末の環境変数設定

環境変数TNS_ADMIN を Wallet の zip を展開したフォルダに指定します。

> 設定 > コントロールパネル > システム > システムの詳細設定 > 環境変数 > ユーザ環境変数 > 新規
> 変数名：TNS_ADMIN
> 変数値：C:\tools\wallet

![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2aed742c-eeea-35bd-c941-2730d9b3ec8a.jpeg)


# 5. Walletを展開したフォルダ内の sqlnet.ora を修正

Walletを展開したフォルダ内の sqlnet.ora を修正します。WALLET_LOCATION の DIRECTORY を明示的に記述します。

```sql
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
↓
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="C:\tools\wallet")))
```


# 6. Walletを解凍したフォルダ内のtnsmanes.oraの内容を置換

tnsnames.ora の port番号 および host名を修正します。

port番号は Well-known port ではない 任意のport にします。本記事では 15222 に修正します。

host は localhost に置換します。単純に置換すると CN= のホスト名も置換されてしまうので、
host=xxx.xxx.oraclecloud.com -> host=localhost で置換します。
※置換する前のホスト名はどこかにメモしておきます。

```sql
prdatp_tp = (description= (address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_xxxxxx_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )
↓
prdatp_tp = (description= (address=(protocol=tcps)(port=15222)(host=localhost))(connect_data=(service_name=xxxxxxxxxxxxxxx_xxxxxx_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )
```

# 7a. SSH転送(SSH Tunnel)を設定(PuTTYの場合)

SSH転送(SSH Tunnel)を設定します。PyTTY の場合は下記のように設定します。

```
■Session
・Host Name(or IP address) => 踏み台サーバのIPアドレスを入力
・Port  =>22(自動入力）

■Connection > SSH > Auth
Authentication parameter > Private Key File
踏み台インスタンスにログインするための秘密鍵を指定

■Connection > SSH > Tunnel > 以下の設定を入力してAdd
Source Port:15222 ※6.で記述した任意のポート
Destination :xxx.xxx.oraclecloud.com:1522（※6.のtnsnames.oraの変更前ホスト名を入力）
ホスト：tnsnames.oraの旧ホスト名
ポート：1522

■Sessionに戻って任意の名前でSave

■Open ⇒ ユーザー名(opc)を入力して踏み台インスタンスにログインします。
```

 > 参考マニュアル
 > https://docs.oracle.com/cd/E83857_01/paas/database-dbaas-cloud/csdbi/create-ssh-tunnel.html#GUID-BE797E70-CB3E-4A80-9620-A7DF1AA91B9E
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e2cb0c8e-a9c1-4820-80d8-ca556bd828d7.jpeg)


# 7b. SSH転送を設定(Teratermの場合)

SSH転送を設定します。Teraterm の場合は下記のように設定します。

```
■設定 ⇒ SSH転送 ⇒ 追加 ⇒ 以下を設定してOK ⇒ OK

ローカルのポート：15222  ※6.で記述した任意のポート
リッスン：空(何も設定しない)
リモート側ホスト：tnsnames.oraの旧ホスト名（※6.のtnsnames.oraの変更前ホスト名を入力）
ポート：1522

■上記の設定を保存する。
設定 ⇒ 設定の保存 ⇒ Teratermのインストールディレクトリに TERATERM.INI として保存

■ターミナルソフト(Teraterm)をクローズして、起動し直す。

■踏み台Computeにログインして、上記のSSH転送設定が反映されているかを確認する。
ログイン後に 設定 ⇒ SSH転送 ⇒ 上記の転送設定が残っていればOK
```
![WS000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/009d57c7-5d8b-d554-9597-6ff2f2078044.jpeg)


# 8. SQL Developer の接続を新規作成、テスト、保存

ターミナルでComputeインスタンスに接続後、SQL Developerを起動してデータベースの接続を新規作成します。

```
接続名：任意の接続名
ユーザー名：ADBのユーザー名
パスワード：ADBユーザーのパスワード

接続タイプ：TNS
ロール：デフォルト
ネットワーク別名 or 接続識別子：接続するtnsnames.oraのTNS名を指定 ※
※環境変数が適切に設定されていれば、ネットワーク別名にtnsnames.oraの接続文字列が表示される
```

上記の接続を作成して、テストボタンを押して成功が出力されればOKです。
テストが成功したら、SQL Developerの接続設定を保存します。
![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/8a233d91-3243-7f3b-8d6f-5479eb4f8134.jpeg)


# 9. まとめ

Computeの鍵とWalletのzipを持っているユーザーだけが、SQL DeveloperでAutonomous Database にアクセスできるようになります。
より安全に Autonomous Database に接続して、ガンガン活用や！彡(^)(^)