2015年6月9日火曜日

PostgreSQL(Postgres Toolkit) pg_hba.confファイルの設定 ユーザ”postgres”のIdent認証に失敗しました

2015年6月9日

ごきげんよう。
タイトルが長い・・



今回はPostgreSQLで
ユーザ”postgres”のIdent認証に失敗しました
なんてエラーがでちゃいましたので
それについて記載します。

結論から記載すると
pg_hba.confファイル
でひっかかりました。
# 暫定対処なのでそこはご注意ください


さて突然ですが
Postgres Toolkit
をご存知でしょうか。


先日(2015/05/30)のPostgreSQLアンカンファレンス
永安さんが発表なさっていたツールです。


スライドによると以下のように記載されています。

Postgres Toolkitとは
  • PostgreSQLのサーバを運用・管理するためのスクリプト・ツールのコレクション
  • 複数のSQLやコマンドを組み合わせて実施する作業を、ひとつのスクリプトで実行できるようにしたもの
  • PostgreSQL DBAの業務の品質向上や負荷低減を目的として、頻繁に実施する作業にフォーカスして機能提供
  • オープンソースライセンスで提供(GPL v2)

私の解釈では
PostgreSQLで業務を行うとき、
頻繁に使うSQLやコマンドをツール化して
メンテナンス性を向上した素敵ツール

なのです。

で、この子で遊んでみた際に私が勝手にひっかかったので
備忘録を書いておきます。


【仕様環境】
OS:CentOS7
DB:PostgreSQL9.4.1
ひとまずチューニングなし

【でてきたエラー】
ユーザ”postgres”のIdent認証に失敗しました


【経緯】
Postgres Toolkitの
pt-index-usageコマンド
をpostgresユーザで実行した際に、上記エラーが発生




まず、CentOS7で
postgresユーザになり、
Postgres ToolkitのPATHを通してあげます。


[root@localhost ~]# su - postgres
最終ログイン: 2015/06/08 (月) 16:44:50 JST日時 pts/1
-bash-4.2$ 
-bash-4.2$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
-bash-4.2$ 
-bash-4.2$ export PATH=$PATH:/opt/uptime/postgres-toolkit-0.2.1/bin
-bash-4.2$ 
-bash-4.2$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/uptime/postgres-toolkit-0.2.1/bin


で、
pt-index-usageを
マニュアル通り実行してあげます。

-bash-4.2$ pt-index-usage -n public -d postgres
[2015-06-09 11:03:01] ERROR: Failed to execute psql. (psql -A -h localhost -p 5432 -U postgres -d postgres)
[2015-06-09 11:03:01] ERROR: psql: FATAL:  ユーザ"postgres"のIdent認証に失敗しました
-bash-4.2$ 


どういうことだオイ!
postgresユーザがはじかれたぞ!!
# 私のせいなんですけど


で、この場合の対処法です。
PostgreSQLはpg_hba.confというファイルで認証を管理してます。


なので、この子を編集してあげます。
-bash-4.2$ vi /var/lib/pgsql/9.4/data/pg_hba.conf

ここの
# IPv6 local connections:
host    all             all             ::1/128                 ident

これはIPv6のループバックアドレスですが ident になってます。
この ident を 例えば trust にすれば無条件で認証してくれます。
md5 にすれば二重MD5ハッシュ化パスワードで認証できます。
# 他にも、アドレスの欄をlocalhostにすると幸せになれるかもしれません。


ちなみに、私の場合IPv4はtrustにしてました。
なので・・気づくのが遅かった・・・
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust


で、
# IPv6 local connections:
host    all             all             ::1/128                 md5
に試しに変更してあげました。

pg_hba.confファイルは変更したらPostgreSQLを再起動してあげます。
[root@localhost ~]# service postgresql-9.4 restart
Redirecting to /bin/systemctl restart  postgresql-9.4.service


さて、
これでもう一度
Postgres Toolkitの
pt-index-usageコマンドを試してあげます。
# コマンドのオプションを変更してtestdbデータベースを確認するようにしてます

-bash-4.2$ pt-index-usage -n public -d testdb
+-------+----------+--------+------------+-----------------+------+------+--------+--------+--------+-------+--------+------------+
|  OID  |  OWNER   | SCHEMA |   TABLE    |      INDEX      | BLKS | SCAN | T_READ | T_FTCH | B_READ | B_HIT | STATUS | TABLESPACE |
+-------+----------+--------+------------+-----------------+------+------+--------+--------+--------+-------+--------+------------+
| 16391 | postgres | public | index_test | index_test_pkey |    1 |    0 |      0 |      0 |      1 |     0 |        | pg_default |
| 16393 | postgres | public | index_test | index_num       |    1 |    0 |      0 |      0 |      0 |     0 |        | pg_default |
| 16394 | postgres | public | index_test | index_moji      |    1 |    0 |      0 |      0 |      0 |     0 |        | pg_default |
+-------+----------+--------+------------+-----------------+------+------+--------+--------+--------+-------+--------+------------+



ひとまず無事に動作したようです。


今回の場合、暫定対処となるので、そこはご注意ください。
各自のセキュリティポリシーで対応してください。
通常postgresユーザは自動的に作られるので
identでハマることはないと思うのですが・・・なんでなんだぜ??




0 件のコメント:

コメントを投稿