PR

ORACLE DATABASEへの接続パスワードをWallet化してハードコードをやめる!

スポンサーリンク
ORACLE

スクリプトから Oracle Database に接続して何かしらの処理を実行させる際、パスワードをスクリプト内に記載したり、外部定義にパスワードをそのまま書いたりしていませんか?
平文でパスワードを記載するのはセキュリティの観点から非常に危険です。
そこで、パスワードを外部に保存し、安全に接続することのできる Oracle Wallet 機能を紹介します。

Oracle Walletとは

パスワードを外部ファイル(ウォレット)に保存しておき、ユーザー名/パスワードを指定せずにデータベースに接続することができます。
ウォレットは暗号化され、パスワードで保護されています。(パスワードがないと保存した情報が参照できません)

Oracle Wallet 使用方法

tnsnames.oraの作成

まずはDBアクセスに使用するために、tnsnames.oraを作成します。
ネットサービス名を”hogehoge”、接続するDBサービス名を”hoge”として作成します。

$ mkdir /home/oracle/wallet
  ※DB接続するスクリプト専用として作成するので、$ORACLE_HOME/network/admin 配下にあるtnsnames.oraとは別で作成します
$ vi /home/oracle/wallet/tnsnames.ora
hogehoge =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = hoge)
    )
  )
$

sqlnet.oraの作成

sqlnet.oraにWalletで必要になるパラメータを記載します。

$ vi /home/oracle/wallet/sqlnet.ora
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/home/oracle/wallet)))
SQLNET.WALLET_OVERRIDE=TRUE
$

Oracle Walletの作成

書式: mkstore -wrl <Walletファイルを保存するディレクトリ> -create

$ mkstore -wrl /home/oracle/wallet -create
Enter password: Wallet本体のパスワードを入力
Enter password again: Wallet本体のパスワードを入力(確認用)
$
以下のファイルが作成されます。
$ ls -l /home/oracle/wallet/
-rw------- 1 oracle oinstall 120 Jul 9 23:33 cwallet.sso
-rw-rw-rw- 1 oracle oinstall 0 Jul 9 23:33 cwallet.sso.lck
-rw------- 1 oracle oinstall 75 Jul 9 23:33 ewallet.p12
-rw-rw-rw- 1 oracle oinstall 0 Jul 9 23:33 ewallet.p12.lck$

Oracle Walletに接続DBユーザとパスワードを登録

書式: mkstore -wrl <Walletファイルディレクトリ> -createCredential <ネットサービス名> <接続DBユーザ名>

今回はdbsnmpユーザに対してwalletを作成してみます。

$ mkstore -wrl //home/oracle/wallet -createCredential hogehoge dbsnmp
Your secret/Password is missing in the command line
Enter your secret/Password: 接続DBユーザ(dbsnmp)のパスワード
Re-enter your secret/Password: 接続DBユーザ(dbsnmp)のパスワード
Enter wallet password: Wallet本体のパスワード
Create credential oracle.security.client.connect_string1
$
別ユーザも登録したい場合は、この手順を繰り返します。

Oracle Walletの内容確認

Wallet内に登録されている情報を表示します。
書式: mkstore -wrl <Walletファイルディレクトリ> -listCredential

$ mkstore -wrl /home/oracle/wallet -listCredential
Enter wallet password: Wallet本体のパスワード
List credential (index: connect_string username)
1: hogehoge dbsnmp ←登録したネットサービス名と接続DBユーザが表示される
$

DB接続確認

$ export TNS_ADMIN=/home/oracle/wallet
$ sqlplus /@hogehoge
SQL> show user
USER is "DBSNMP"
SQL>

最後に

Oracle Database に接続するスクリプトにパスワードをハードコードしている場合は、セキュリティ向上のため Oracle Wallet によるパスワード隠蔽化をオススメします。

今回はOracle Walletを使用したセキュリティ対策を紹介しましたが、Oracle データベースのセキュリティ観点はたくさん存在します。

私は以下の書籍で学習しました。データベースは重要なデータを扱うことが多いと思いますので、堅いシステム構築の参考になればと思います。