ごきげんよう。
タイトルが長い・・
今回は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 件のコメント:
コメントを投稿