概要
Wallet認証情報を用いて、JDBC Thinドライバ接続検証した時のメモを残しておきます。
Oracle Help Center の記事 を参考にしています。
前提条件
環境の前提条件は以下の通りです。
- Windows環境
- Oracle 12c インストール済、テストユーザ作成済
- Eclipse インストール済
- JDK8 インストール済
作業の流れ
おおまかな作業の流れは、以下の通りです。
- Oracle Wallet 作成
- 環境変数の設定
- DB接続確認(SQL*Plus)
- Javaからの接続準備
- テストプログラム作成&動作確認
Oracle Wallet 作成
tnsnames.ora の作成
$ORACLE_HOME/network/admin 配下にあるtnsnames.oraとは別で作成します。
ディレクトリ作成:
C:\app\oracle\wallet
ファイル作成:
tnsnames.ora
サービス・ネーミング「hogepdb」 を追加します。
hogepdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = WinPro)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pdb)
)
)
※サービス・ネーミング「hogepdb」、サービス名「pdb」、
ホスト名「WinPro」、ポート番号「1521」として作成する例です。
sqlnet.ora に必要なパラメータを記載
ファイル作成:
C:\app\oracle\wallet\sqlnet.ora
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=C:\app\oracle\wallet)))
SQLNET.WALLET_OVERRIDE=TRUE
Oracle Walletの作成
mkstore -wrl ”Walletファイル保存ディレクトリ” -create
C:\app\oracle\wallet>mkstore -wrl . -create
※Wallet本体のパスワードを入力します。 パスワード例:Wa11etPass
Walletファイル保存ディレクトリにファイルが生成されます。
Oracle Walletに接続DBユーザとパスワードを登録
mkstore -wrl ”Walletファイルディレクトリ” -createCredential ”サービス・ネーミング” ”接続DBユーザ名”
例としてSAMPLEUSR1ユーザに対してwalletを作成してみます。
C:\app\oracle\wallet>mkstore -wrl . -createCredential hogepdb SAMPLEUSR1
Oracle Walletの内容確認
mkstore -wrl ”Walletファイルディレクトリ” -listCredential
C:\app\oracle\wallet>mkstore -wrl . -listCredential
※上記のように確認できれば作成完了です。
削除する場合の書式:
mkstore -wrl ”Walletファイルディレクトリ” -deleteCredential ”サービス・ネーミング” ”接続DBユーザ名”
変更する場合の書式:
mkstore -wrl ”Walletファイルディレクトリ” -modifyCredential ”サービス・ネーミング” ”接続DBユーザ名” ”新パスワード”
環境変数の設定
[スタート] > [コントロール パネル] > [システム] を選択します。
[システムの詳細設定] を選択し [詳細設定] タブを表示します。
[環境変数] を選択し、
変数名: TNS_ADMIN
変数値: TNSNames.ora ファイルが含まれるディレクトリ
を入力して [OK] をクリックします。
DB接続確認(SQL*Plus)
新たにコマンドプロンプトを立ち上げ、DB接続確認を行います。
C:\USERS>sqlplus /@hogepdb
Javaからの接続準備
ウォレットのロケーションの設定
以下のファイル
$JRE_HOME/jre/lib/security/java.security
プロバイダ・リストの末尾にOraclePKIProvider
を追加します。
security.provider.11=oracle.security.pki.OraclePKIProvider
※上書き禁止になっている場合、他のディレクトリにコピーして編集し、元のファイルを上書きコピーすることで対応可能です。
テストプログラム作成&動作確認
テストプログラム
以下のテストプログラムを記述します。
package sample.jdbc;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class OracleWalletExample {
public static void main(String[] argv) {
System.out.println("-------- Oracle JDBC Connection Testing ------");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return;
}
System.out.println("Oracle JDBC Driver Registered!");
determineAndSetTnsHome();
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:oracle:thin:@hogepdb");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
private static void determineAndSetTnsHome() {
String tnsAdmin = System.getenv("TNS_ADMIN");
System.out.println("tnsAdmin=" + tnsAdmin);
if (tnsAdmin == null) {
String oracleHome = System.getenv("ORACLE_HOME");
System.out.println("oracleHome=" + oracleHome);
if (oracleHome == null) {
return; //failed to find any useful env variables
}
tnsAdmin = oracleHome + File.separatorChar + "network" + File.separatorChar + "admin";
}
System.setProperty("oracle.net.tns_admin", tnsAdmin);
System.setProperty("oracle.net.wallet_location",
"(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=" + tnsAdmin + ")))");
}
}
Eclipse プロジェクト例
※ クラスパスにoraclepki.jar、 osdt_core.jar、 osdt_cert.jar が必要です。
Oracleのライブラリからコピーするか、 直接パスを通してください。
※以下、コピーした場合の例です。
動作確認
Eclipseで「OracleWalletExample.java」ソースを右クリック、「実行」>「Java アプリケーション」を選択します。
プログラムが実行され、「コンソール」に「You made it, take control your database now!」が表示されていれば、接続確認OKです。