クラウドサービスで利用できるマネージドのデータベースは簡単に作成できるのですが、いざローカル環境のクライアントから接続しようとすると、ネットワークの設定や認証の方法がオンプレミスのデータベースとは異なるので接続に戸惑いました。
今回は Oracle Cloud Infrastructure (OCI) で作成した Autonomous Database に、ローカルのWindowsクライアントから接続する手順をまとめました。
検証環境
Autonomous Database
Autonomous Databaseは、Oracleが提供する自律運転型のデータベースサービスです。自動チューニング、自動スケーリング、自動バックアップなどの機能を備えており、ユーザーの管理負荷を大幅に軽減します。
検証用にTESTDB01というデータベース名で Autonomous Database を作成しました。
Autonomous Database 作成の手順については、以前の記事を参照してください。
Autonomous Database 側の設定
Autonomous Database に接続するための設定を行います。
相互TLS (mTLS)認証
TLS(Transport Layer Security)は、通信の保護を目的とした暗号化プロトコルです。インターネット上でデータを安全にやり取りするために広く使用されています。
mTLS(Mutual TLS)はTLSの上位概念で、サーバーだけでなくクライアントも認証を受ける双方向の認証プロトコルです。
mTLS を必要とするかどうかを設定します。ここではチェックをつけてmTLS認証を必要とします。
アクセス制御リスト
Autonomous Database に接続できるクライアントを、IPアドレス、CIDRブロック、OCI仮想クラウドネットワーク(VCN)から選択します。
今回はローカルPCから接続するので、ここでは自分のIPアドレスを追加します。
Windowsクライアントの設定
ウォレットのダウンロード
ウォレットとは、資格証明に必要な証明書や秘密鍵を格納したコンテナのことです。mTLS認証では、クライアント資格証明にウォレットが必要になります。
Autonomous Databaseの「データベース接続」からウォレットをダウンロードします。 Wallet_(データベース名).zip という zip ファイルで出力されます。
Oracle SQL developer からの接続
「データベースの作成/選択」画面で、ユーザー情報と接続情報を設定します。
項目 | 設定値 |
---|---|
Name | TESTDB01 |
データベースのタイプ | Oracle |
認証タイプ | デフォルト |
ユーザー名 | admin |
ロール | デフォルト |
パスワード | ************ |
パスワードの保存 | (チェックなし) |
接続タイプ | クラウドウォレット |
構成ファイル | ¥ダウンロードフォルダ¥Wallet_TESTDB01.zip |
サービス | testdb01_high |
ユーザーは、 Autonomous Database 構築時に作成される admin を指定します。
接続タイプを「クラウドウォレット」を指定することで、ダウンロードしたウォレットファイルだけで接続先情報を設定できます。
サービスは testdb01_high、testdb01_low、testdb01_medium、testdb01_tp、testdb01_tpurgent から選択できますが、どれもデータベース testdb01 に接続されます。
また、データベース名の後についている high、middle、low、tp、tpurgent は、同時セッション数や並列処理を制御するリソースマネージャに紐づいています。
sqlplus からの接続
ウォレットの配置
ダウンロードしたウォレットの zip ファイルを (ORACLE_HOME)/network/admin に解凍します。
ウォレットには tnsnames.ora と sqlnet.ora が含まれています。既存のファイルが存在する場合は、上書きしないように退避して追記してください。
tnsnames.ora には、以下のように接続識別子情報が記載されています。
testdb01_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=****.********-1.oraclecloud.com))(connect_data=(service_name=***************_testdb01_high.****.oraclecloud.com))(security=(ssl_server_dn_match=yes))) testdb01_low = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=****.********-1.oraclecloud.com))(connect_data=(service_name=***************_testdb01_low.****.oraclecloud.com))(security=(ssl_server_dn_match=yes))) testdb01_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=****.********-1.oraclecloud.com))(connect_data=(service_name=***************_testdb01_medium.****.oraclecloud.com))(security=(ssl_server_dn_match=yes))) testdb01_tp = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=****.********-1.oraclecloud.com))(connect_data=(service_name=***************_testdb01_tp.****.oraclecloud.com))(security=(ssl_server_dn_match=yes))) testdb01_tpurgent = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=****.********-1.oraclecloud.com))(connect_data=(service_name=***************_testdb01_tpurgent.****.oraclecloud.com))(security=(ssl_server_dn_match=yes)))
sqlnet.ora には、以下のようにウォレットの場所が記載されています。
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
データベースへの接続
sqlplus を起動し ユーザー接続識別子を指定して接続します。
おわりに
ローカルの WindowsクライアントPC から、 OCI の Autonomous Database に接続する手順を検証しました。
クラウド上のマネージドデータベースに接続するということで、接続先のホスト名などの情報が見当たらず戸惑いましたが、OCI で生成されたウォレットに接続先が記載された tnsnames.ora が含まれていたことで接続できました。