[OCI]ウォレットを使用せずにSQL*PlusからAutonomous DatabaseにTLS認証で接続してみた

# はじめに
以前から、JDBC Thinドライバーを用いたアプリケーションはAutonomous Databaseにウォレットを使用せずにTLS認証で接続できましたが、2022/1からOracle Call Interfaceを用いたアプリケーションも、一定の条件のもとで、Autonomous Databaseにウォレットを使用せずにTLS認証で接続できるようになりました。

今回は、最もポピュラーなOracle Call Interfaceを用いたアプリケーションであるSQL*Plusで検証してみました。

# 1.Computeインスタンスの作成

OSとしてAutonomous Linux 7.9を選択し、Computeインスタンスを作成しました。

作成したComputeインスタンスのパブリックIPをコピーし、メモしておきます。

# 2.Autonomous Databaseの作成

Autonomous Databaseを作成します。
OCIコンソールのAutonomous Databaseの画面に移動し、「Autonomous Databaseの作成」をクリックします。
![スクリーンショット 2022-02-23 18.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7f8e1bff-78fa-1c20-2462-07a1cdca1da8.png)
Autonomous Databaseの作成画面が表示されます。
![スクリーンショット 2022-02-23 18.47.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d06f753b-03fc-f3f9-5302-b37a695b9454.png)
基本情報を入力します。
![スクリーンショット 2022-02-23 18.47.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b7a847b2-d7ae-7d1d-e5f7-0cb4fa14a7fc.png)
ワークロード・タイプを選択します。
今回はトランザクション処理（Autonomous Transaction Processing）を選択しました
![スクリーンショット 2022-02-23 18.47.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f08bccff-1dc6-0637-1dbd-a084d8fb5aa3.png)
デプロイメント・タイプを選択します。
「共有インフラストラクチャ」を選択します。
![スクリーンショット 2022-02-23 18.47.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8e884bad-1525-ad2a-67cf-2e8e59f19f77.png)
データベースの構成を入力します。
今回は検証目的のため、最小構成の1 OCPU、ストレージ1TBとしました。
![スクリーンショット 2022-02-23 18.48.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d96d2a98-cfc3-f14e-08e5-cc4bab14a14a.png)
管理者ユーザadminのパスワードを入力します。
![スクリーンショット 2022-02-23 18.48.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/68df0b0c-2c79-2b35-6f4e-db65da7ff48e.png)
次のネットワーク・アクセスの選択がポイントです。
ウォレットを使わずにTLS認証でAutonomous Databaseに接続するには、Autonomous Databaseのアクセス・タイプが「許可されたIPおよびVCN限定のセキュア・アクセス」または「プライベート・エンドポイント・アクセスのみ」である必要があります。
今回はアクセス・タイプとして「許可されたIPおよびVCN限定のセキュア・アクセス」を選択します。
「IP表記法タイプ」として"IPアドレス"を選択し、「値」に先ほど作成したComputeインスタンスのパブリックIPアドレスを入力します。
「相互TLS(mTLS)認証が必要」のチェックをオフにします。このチェックをオフにすることで、アクセスを許可したIPアドレスからはウォレットを使用せずにTLS認証でAutonomous Databaseに接続できるようになります。
![スクリーンショット 2022-02-23 18.49.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b7377f6a-acff-85cf-54fe-4669f6dd5e62.png)
ライセンス・タイプとして「ライセンス込み」を選択します。
![スクリーンショット 2022-02-23 18.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1855cbbe-6eff-3bab-6077-7d26ecb7e259.png)
通知先のメールアドレスを入力します。
![スクリーンショット 2022-02-23 18.51.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/41808b14-bb7f-477a-44c2-35aad7cb7d3f.png)
入力が完了したら、「Autonomous Databaseの作成」をクリックします。
![スクリーンショット 2022-02-23 19.08.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/cc4a7288-2740-f831-c4bb-e2f5308827c3.png)
数分待つとAutonomous Databaseが使用可能になります。
![スクリーンショット 2022-02-23 19.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/24c6f451-2ee7-495c-725f-d52b65845ce6.png)
ネットワークの欄を見ると、通常と異なる設定になっていることがわかります。
なお、アクセス制御リスト、相互TLS(mTLS)認証の設定は、Autonomous Database作成後も変更が可能です。
![スクリーンショット 2022-02-23 19.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/34005514-59b0-fcce-0654-57a0a5257400.png)

# 3.TLS認証で接続するための接続文字列の取得
「DB接続」をクリックします。
![スクリーンショット 2022-02-23 19.16.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2d2c9894-a04b-9c1c-fc7d-6134c71c79d0.png)
データベース接続の画面が表示されます。
![スクリーンショット 2022-02-23 19.17.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/76a892de-32b9-8b1d-4ebb-0a17bb18d7fb.png)
接続文字列蘭のTLS認証をTLSに変更します。
![スクリーンショット 2022-02-23 19.19.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ce787fd2-ba10-e2d0-9a20-9174a39595e9.png)
接続文字列をコピーし、メモしておきます。
![スクリーンショット 2022-02-23 19.21.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ebdef48d-ee88-f458-c7c2-954ba7b23429.png)
「閉じる」をクリックします。
![スクリーンショット 2022-02-23 19.23.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/81f609e2-cf17-5997-6270-a18f517838df.png)

# 4.ComputeインスタンスへのOracle Instant Clientのインストール
SSHでopcユーザとしてComputeインスタンスにログインします。

```
Welcome to Autonomous Linux
Effective kernel version is 5.4.17-2136.302.7.2.1.el7uek.x86_64
[opc@compute1 ~]$
```
yumコマンドでOracle Instant Clientをインストールします。
ウォレットを使用せずにAutonomous Databaseに接続するためには、**Linux x64プラットフォームでOracle Clientのバージョンが19.13以上**である必要があります。
ということで、今回はOracle Instant Client 19.14をインストールしました。

```
[opc@compute1 ~]$ sudo yum install -y oracle-release-el7
Loaded plugins: langpacks, ulninfo
ol7_UEKR6                                                                                   | 3.0 kB  00:00:00     
ol7_addons                                                                                  | 3.0 kB  00:00:00     
ol7_ksplice                                                                                 | 3.0 kB  00:00:00     
ol7_latest                                                                                  | 3.6 kB  00:00:00     
ol7_oci_included                                                                            | 2.9 kB  00:00:00     
ol7_optional_latest                                                                         | 3.0 kB  00:00:00     
ol7_software_collections                                                                    | 3.0 kB  00:00:00     
ol7_x86_64_userspace_ksplice                                                                | 3.0 kB  00:00:00     
(1/16): ol7_UEKR6/x86_64/updateinfo                                                         | 439 kB  00:00:00     
(2/16): ol7_addons/x86_64/updateinfo                                                        | 137 kB  00:00:00     
(3/16): ol7_latest/x86_64/group_gz                                                          | 136 kB  00:00:00     
(4/16): ol7_ksplice/primary_db                                                              | 2.6 MB  00:00:00     
(5/16): ol7_ksplice/updateinfo                                                              | 7.9 kB  00:00:00     
(6/16): ol7_oci_included/x86_64/primary_db                                                  | 917 kB  00:00:00     
(7/16): ol7_latest/x86_64/updateinfo                                                        | 3.4 MB  00:00:00     
(8/16): ol7_optional_latest/x86_64/updateinfo                                               | 1.4 MB  00:00:00     
(9/16): ol7_addons/x86_64/primary_db                                                        | 218 kB  00:00:00     
(10/16): ol7_software_collections/x86_64/updateinfo                                         | 8.9 kB  00:00:00     
(11/16): ol7_x86_64_userspace_ksplice/updateinfo                                            |  80 kB  00:00:00     
(12/16): ol7_x86_64_userspace_ksplice/primary_db                                            | 265 kB  00:00:00     
(13/16): ol7_optional_latest/x86_64/primary_db                                              | 5.6 MB  00:00:00     
(14/16): ol7_software_collections/x86_64/primary_db                                         | 5.8 MB  00:00:00     
(15/16): ol7_UEKR6/x86_64/primary_db                                                        |  30 MB  00:00:00     
(16/16): ol7_latest/x86_64/primary_db                                                       |  39 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package oracle-release-el7.x86_64 0:1.0-4.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================
 Package                           Arch                  Version                   Repository                 Size
===================================================================================================================
Installing:
 oracle-release-el7                x86_64                1.0-4.el7                 ol7_latest                 14 k

Transaction Summary
===================================================================================================================
Install  1 Package

Total download size: 14 k
Installed size: 18 k
Downloading packages:
oracle-release-el7-1.0-4.el7.x86_64.rpm                                                     |  14 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : oracle-release-el7-1.0-4.el7.x86_64                                                             1/1 
  Verifying  : oracle-release-el7-1.0-4.el7.x86_64                                                             1/1 

Installed:
  oracle-release-el7.x86_64 0:1.0-4.el7                                                                            

Complete!
[opc@compute1 ~]$
[opc@compute1 ~]$ sudo yum install -y oracle-instantclient19.14-sqlplus
Loaded plugins: langpacks, ulninfo
ol7_oracle_instantclient                                                                    | 2.9 kB  00:00:00     
(1/2): ol7_oracle_instantclient/x86_64/updateinfo                                           |   71 B  00:00:00     
(2/2): ol7_oracle_instantclient/x86_64/primary_db                                           |  27 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package oracle-instantclient19.14-sqlplus.x86_64 0:19.14.0.0.0-1 will be installed
--> Processing Dependency: oracle-instantclient19.14-basic >= 19.14.0.0.0 for package: oracle-instantclient19.14-sqlplus-19.14.0.0.0-1.x86_64
--> Running transaction check
---> Package oracle-instantclient19.14-basic.x86_64 0:19.14.0.0.0-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================
 Package                                  Arch          Version              Repository                       Size
===================================================================================================================
Installing:
 oracle-instantclient19.14-sqlplus        x86_64        19.14.0.0.0-1        ol7_oracle_instantclient        687 k
Installing for dependencies:
 oracle-instantclient19.14-basic          x86_64        19.14.0.0.0-1        ol7_oracle_instantclient         51 M

Transaction Summary
===================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 52 M
Installed size: 230 M
Downloading packages:
(1/2): oracle-instantclient19.14-sqlplus-19.14.0.0.0-1.x86_64.rpm                           | 687 kB  00:00:00     
(2/2): oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64.rpm                             |  51 MB  00:00:00     
-------------------------------------------------------------------------------------------------------------------
Total                                                                               57 MB/s |  52 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64                                            1/2 
  Installing : oracle-instantclient19.14-sqlplus-19.14.0.0.0-1.x86_64                                          2/2 
  Verifying  : oracle-instantclient19.14-sqlplus-19.14.0.0.0-1.x86_64                                          1/2 
  Verifying  : oracle-instantclient19.14-basic-19.14.0.0.0-1.x86_64                                            2/2 

Installed:
  oracle-instantclient19.14-sqlplus.x86_64 0:19.14.0.0.0-1                                                         

Dependency Installed:
  oracle-instantclient19.14-basic.x86_64 0:19.14.0.0.0-1                                                           

Complete!
[opc@compute1 ~]$ 
```

環境変数を設定します。

/etc/profileを編集します。
```
[opc@compute1 ~]$ sudo vi /etc/profile
```
ファイルの末尾に以下の内容を追加します。

```
export ORACLE_HOME=/usr/lib/oracle/19.14/client64/lib
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export NLS_LANG=Japanese_Japan.AL32UTF8
export PATH=/usr/lib/oracle/19.14/client64/bin:$PATH
```
環境変数を適用します。

```
[opc@comp1 ~]$ source /etc/profile
Welcome to Autonomous Linux
Effective kernel version is 5.4.17-2136.302.7.2.1.el7uek.x86_64
[opc@compute1 ~]$
```

# 5.tnsnames.oraファイルの作成
Autonomous Databaseに接続するためのtnsnames.oraファイルを作成します。

```
[opc@comp1 ~]$ sudo vi $ORACLE_HOME/network/admin/tnsnames.ora
```
以下のようなエントリーを追加します。
　接続文字列のエイリアス=先ほどコピーしたAutonomous DatabaseのTLS接続文字列
tnsnames.oraの内容は、こちらのファイルのようになります。

```txt:$ORACLE_HOME/network/admin/tnsnames.ora
testatp1_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxx_demoatp1_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)(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")))
```

# 6.SQL*PlusからAutonomous Databaseに接続
SQL*PlusからAutonomous Databaseに接続してみます。

```
[opc@compute1 ~]$ sqlplus admin/Demo#1Demo#1@testatp1_high

SQL*Plus: Release 19.0.0.0.0 - Production on 水 2月 23 09:43:19 2022
Version 19.14.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

最終正常ログイン時間: 水 2月  23 2022 09:04:58 +00:00


Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0
に接続されました。
SQL>
```
ウォレットを使用せずに、SQL*PlusからAutonomous DatabaseにTLS認証で接続できました。

# おまけ：Oracle Instant Client 19.12からの接続
同様に、SQL*Plus 19.12（Oracle Instant Client 19.2）からAutonomous Databaseに接続してみました。

```
[opc@compute1 ~]$ sqlplus admin/Demo#1Demo#1@demoatp1_high

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Feb 23 02:59:56 2022
Version 19.12.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

ERROR:
ORA-28759: failure to open file


Enter user-name: 
```
SQL*Plus 19.12（Oracle Instant Client 19.2）は、ウォレットを使用せずにAutonomous DatabaseにTLS認証で接続できないため、エラーになりました。

# 参考情報
[Autonomous DatabaseでTLSまたは相互TLS (mTLS)認証のみを許可するためのネットワーク・オプションの更新](https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/adbsa/support-tls-mtls-authentication.html#GUID-3F3F1FA4-DD7D-4211-A1D3-A74ED35C0AF5)
[Prepare for Oracle Call Interface, ODBC, and JDBC OCI Connections Using TLS Authentication](https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/connect-prepare-oci-tls.html#GUID-423C98D1-6A18-4E56-A77F-B6F5CA1424E2)