はじめに
Oracle Cloud Infrastructure Base Database ServiceからAutonomous DatabaseにWalletを使ったmTLS接続とBase Database のPDBへの接続の併用するtnanames.oraの記述を試してみました。
Autonomous Databaseへのtls接続ができないバージョンのBase DatabaseからのDatabase Linkの作成が簡便になります。
ウォレット ( Wallet ) のダウンロード・解凍
Autonomous Database接続用のウォレットをダウンロードし、Base Databaseのノードでoracleユーザで解凍します。
unzip Wallet_ADB.zip /home/oracle/wallet
Archive: ../Wallet_ADB.zip
inflating: ewallet.pem
inflating: README
inflating: cwallet.sso
inflating: tnsnames.ora
inflating: truststore.jks
inflating: ojdbc.properties
inflating: sqlnet.ora
inflating: ewallet.p12
inflating: keystore.jks
Base Databaseのtnsnames.oraの編集
解凍したtnsnames.oraから Autonomous Database接続用の TNSエントリを Base Databaseの $ORACLE_HOME/network/admin/tnsnames.ora に追記します。
$ more $ORACLE_HOME/network/admin/tnsnames.ora
adb_low=(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=XXXXXXX_adb_low.adb.oraclecloud.com))(s
ecurity=(ssl_server_dn_match=no)))
追加したTNSエントリに MY_WALLET_DIRECTORY パラメータを追記します。MY_WALLET_DIRECTORYには、ウォレットを解凍したディレクトリを指定します。
(ssl_server_dn_match=no) の次に追記します。
$ more $ORACLE_HOME/network/admin/tnsnames.ora
adb_low=(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=XXXXXXX_adb_low.adb.oraclecloud.com))(s
ecurity=(ssl_server_dn_match=no)(MY_WALLET_DIRECTORY=/home/oracle/wallet)))
Base Databaseのsqlnet.oraの編集
Base Databaseの $ORACLE_HOME/network/admin/sqlnet.ora のSQLNET.ENCRYPTION_CLIENT と SQLNET.CRYPTO_CHECKSUM_CLIENT の値を「 ACCEPTED 」に変更します。
# SQLNET.ENCRYPTION_CLIENT=REQUIRED
# SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED
SQLNET.ENCRYPTION_CLIENT=ACCEPTED
SQLNET.CRYPTO_CHECKSUM_CLIENT=ACCEPTED
接続の確認
$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Mon Feb 20 10:00:00 2023
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c EE High Perf Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
SQL> conn scott/<PASSWORD>@adb_low
Connected.
SQL> conn scott/<PASSWORD>@PDB
Connected.
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0.2/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
adb_low=(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=XXXXXXX_adb_low.adb.oraclecloud.com))(s
ecurity=(ssl_server_dn_match=no)(MY_WALLET_DIRECTORY=/home/oracle/wallet)))
PDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =pdb1.oraclevcn.com)
)
)
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))
SQLNET.ENCRYPTION_SERVER=REQUIRED
SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER=(AES256,AES192,AES128)
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA1)
# SQLNET.ENCRYPTION_CLIENT=REQUIRED
# SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED
SQLNET.ENCRYPTION_CLIENT=ACCEPTED
SQLNET.CRYPTO_CHECKSUM_CLIENT=ACCEPTED
SQLNET.ENCRYPTION_TYPES_CLIENT=(AES256,AES192,AES128)
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA1)
SQLNET.EXPIRE_TIME=10
おわりに
MY_WALLET_DIRECTORYパラメータで環境変数ではなくtnsnames.oraのサービスエントリ内でウォレットの場所を指定できました。これにより複数のウォレットを使い分けることができます。(別リージョンや別テナントのADBへの接続など)
Database Link作成時のUSING句に TNSサービス名を指定できます。
参考情報
- How To Connect Two ADB/SSL Enabled Databases Without Changing TNS Admin Environmental Variable (Doc ID 2662158.1)
- 他のデータベースからAutonomous Databaseへのデータベース・リンクの作成
- Oracle Cloud: Oracle Database 11gR2 から Autonomous Database へ Database Link接続してみてみた
編集前の接続時エラー例
SQL> conn scott/Welcome1#Welocme1#@adb_low
ERROR:
ORA-28759: failure to open file
tnsnames.oraのみ編集後の接続時エラー例
SQL> conn scott/<PASSWORD>@adb_low
ERROR:
ORA-12696: Double Encryption Turned On, login disallowed