0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クライアント用 Wallet を作成する(Oracle Database 19c / mkstore)

Last updated at Posted at 2023-06-29

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?