PostgreSQL, MySQLにパスワード入力なしで接続する方法

こんにちは、河野です。

集計処理などをバッチで実行する時に、パスワードを入力せずにデータベースに接続する必要がありますよね。ついつい忘れてしまうので、備忘録としてまとめてみました。

PostgreSQLの場合

パスワードファイルを使用します。実行ユーザーのホームディレクトリに.pgpassというファイルを作って、その中に以下の書式で設定を記述します。

コロンで区切られたパスワード以外の各項目は*で省略できます。1つのアカウントで複数のデータベースを管理している場合、必要に応じて設定を書き足していけばOKです。

こんな感じです。

このパスワードファイルは権限を600に設定しておく必要があります。権限が600でない場合は使用されません。ターミナル上でpsqlコマンドを実行すると「アクセス権限がちゃんと設定されていないよ」というメッセージが出ますので、事前に確認してみてください。

また、パスワードファイルはデフォルトでは、$HOME/.pgpassを参照しますが、PGPASSFILEという環境変数が指定されていれば、そちらを参照するようになります。

cf: PostgreSQL 9.2.0文書 パスワードファイル

MySQLの場合

ユーザー固有の設定ファイルを使用することで、パスワードの入力を省くことができます。

MySQLは実行ユーザーの$HOME/.my.cnfファイルを参照するので、クライアントの設定としてパスワードを記述します。

あくまでも設定を記述するための方法で、パスワード専用ではないということに注意してください。

また、ここで設定しているパスワードは実行時のデフォルトパスワードになりますので、MySQL上の異なるユーザーを使用したい時には使えません。

そんな時には、--defaults-extra-file オプションを使いますが、注意が必要です。MySQLでは設定ファイルの読み込み順序が決まっており、2重に設定されている項目は、後から設定されたものが優先されるからです。

defaults-extra-file オプションで指定したファイルと、.my.cnfでは、.my.cnfが後から読み込まれます。どちらにもパスワードが設定されていると、.my.cnfのパスワードが使用されるので意味がありません。そのために.my.cnfにも修正が必要になります。

パスワード以外にも、2重に読み込ませたくないオプションがある場合には、それらも切り分ける必要があります。

各ファイルの設定ができたら、以下のように実行します。

という感じです。

なんだか面倒くさいですね。いっそのこと、Linuxのユーザーを別途作って、それぞれの.my.cnfを設定した方が良いかもしれませんね…。

cf: MySQL :: MySQL 5.1 リファレンスマニュアル :: 3.3.2 オプションファイルの使用

どちらにも推奨されていない方法

PostgreSQLでもMySQLでも、ある環境変数にパスワードを設定しておくとそれが使用される、という設定があります。推奨されていない方法ですので、使用しないようにしましょう。

以上、パスワードを省く方法でした!

Comments are closed, but you can leave a trackback: Trackback URL.