Walletの必要性
クライアント・アプリケーションの認証には一般的にはパスワードを使用します。しかし自動的に定期実行されるバッチ・プログラムの場合、パスワード入力ができない場合がほとんどです。このためデータベース管理者権限を使って OS 認証(OSDBA)を使ったり、パスワードをスクリプトに直接埋め込むなどの手法がとられます。
しかしこれらの手法はセキュリティ上好ましくないため、パスワードを安全に保存するための仕組みが必要です。ここでは Wallet と呼ばれる Oracle Database の機能を使って、特定のユーザー権限で接続するためにパスワードの入力を不要にする設定を検証します。
Wallet の作成
Walletの実体は特定のディレクトリに保存された複数のファイルです。Walletの作成には mkstore コマンド($ORACLE_HOME/bin/mkstore) にディレクトリを指定します。以下の例では oracle ユーザーのホーム・ディレクトリに wallet1 ディレクトリを作成し、そこに Wallet を作成しています。Wallet 管理のためのパスワードを2回入力します。-wrl オプションがディレクトリの指定、-create オプションが Wallet の作成を指定しています。
$ mkdir wallet1
$ mkstore -wrl $HOME/wallet1 -create
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Enter password: **Wallet管理パスワード**
Enter password again: **Wallet管理パスワード**
$
$ ls -l wallet1/
total 8
-rw------- 1 oracle oinstall 194 Jun 29 16:20 cwallet.sso
-rw------- 1 oracle oinstall 0 Jun 29 16:20 cwallet.sso.lck
-rw------- 1 oracle oinstall 149 Jun 29 16:20 ewallet.p12
-rw------- 1 oracle oinstall 0 Jun 29 16:20 ewallet.p12.lck
Wallet作成直後にディレクトリを確認すると、複数のファイルが作成されていることがわかります。
Wallet に認証資格を格納
Wallet に認証情報を格納します。mkstore コマンドに -createCredential オプションを指定します。
このオプションには接続名とユーザー名を指定します。下記の例では接続名として o19a 、接続ユーザー名として scott を指定しています。データベース接続パスワードと、Wallet管理パスワードを入力します。
$ mkstore -wrl $HOME/wallet1 -createCredential o19a scott
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Your secret/Password is missing in the command line
Enter your secret/Password: **データベース接続パスワード**
Re-enter your secret/Password: **データベース接続パスワード**
Enter wallet password: **Wallet管理パスワードパスワード**
$
認証資格の確認
Wallet に保存された認証資格を確認します。-listCredential オプションを指定します。Wallet 管理パスワードの入力が必要です。
$ mkstore -wrl $HOME/wallet1 -listCredential
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Enter wallet password: **Wallet管理パスワードパスワード**
List credential (index: connect_string username)
1: o19u scott
Wallet の場所を指定
Oracle Database Client に Wallet の場所を知らせる必要があります。Wallet の場所は sqlnet.ora ファイルで指定します。下記の例では環境変数 TNS_ADMIN を Wallet 用ディレクトリに指定して、sqlnet.ora ファイルと Wallet ファイルを同居させています。
Wallet の場所は WALLET_LOCATION パラメーターを指定します。SQLNET.WALLET_OVERRIDE パラメーターは、Wallet の資格証明を優先する設定です。
$ export TNS_ADMIN=$HOME/wallet1
$ cat $HOME/wallet1/sqlnet.ora
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /home/oracle/wallet1)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
接続情報の格納
Wallet に保存した接続名と対応する名前を tnsnames.ora ファイルに格納します。
$ cat $HOME/wallet1/tnsnames.ora
o19a =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.131)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = o19u)
)
)
$
Wallet を使った接続
Wallet を使った認証を行う場合はユーザー名、パスワードを指定せずに tnsnames.ora の接続名のみで接続します。下記の例ではユーザー名とパスワードを指定していませんが、SCOTT ユーザーとして接続できていることがわかります。
$ sqlplus /@o19u
SQL*Plus: Release 19.0.0.0.0 - Production on 木 6月 29 22:49:17 2023
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 木 6月 29 2023 16:36:42 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL> SELECT USER FROM DUAL;
USER
--------------------------------------------------------------------------------
SCOTT
SQL>
複数の認証資格を保存
Walletには複数の認証情報を格納できます。下記の例では接続名として o19b を、ユーザ名に SCOTT2 を指定して2つ目の認証情報を保存しています。認証情報の一覧を表示すると、2つ目の接続情報が出力されます。
$ mkstore -wrl $HOME/wallet1 -createCredential o19b scott2
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Your secret/Password is missing in the command line
Enter your secret/Password: **データベース接続パスワード**
Re-enter your secret/Password: **データベース接続パスワード**
Enter wallet password: **Wallet管理パスワードパスワード**
$
$ mkstore -wrl $HOME/wallet1 -listCredential
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
Enter wallet password: **Wallet管理パスワードパスワード**
List credential (index: connect_string username)
2: o19b scott2
1: o19u scott
$
接続先としてユーザー名とパスワードを省略し、接続名 o19b を指定します(tnsnames.ora ファイルも修正します)。SCOTT2 ユーザーで接続が成功していることがわかります。
$ sqlplus /@o19b
SQL*Plus: Release 19.0.0.0.0 - Production on 木 6月 29 23:35:14 2023
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 木 6月 29 2023 23:33:16 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL> SELECT USER FROM DUAL;
USER
--------------------------------------------------------------------------------
SCOTT2
SQL>
Author: Noriyoshi Shinoda / Date: Jun 29, 2023