Postgresのユーザーのパスワードを忘れた場合

サーバーで色々操作していてPostgresのデータベースで使うユーザーのパスワードを忘れた場合は下記の方法で新しいパスワードを再設定しなおしましょう。

今日の環境

Ubuntu22.04

PostgreSQL 14

今日の目的

Postgresの設定ファイルから仮でパスワードなしで接続できるようにします。

その後にコマンドから、新しいパスワードを設定しなおします。

最後にパスワードでデータベースに接続させるように再設定します。

※作業にリスクがあると感じた場合はバックアップを取るなり自己責任で操作をしてください。

pg_hba.confを探す

Postgrtesをインストールした後にpg_hba.confのコンフィグファイルも作成されます。ここでユーザーがどのようにデータベースに接続できるようにするか設定できます。

通常は下記のファイルパスにあります。

PostgreSQLのバージョンによりファイルの場所が少し変わるので注意します。

/etc/postgresql-9.1/pg_hba.conf

/etc/postgresql/14/main/pg_hba.conf

rootで入っている場合はpwdのコマンドでどこにいるか確認しましょう。

cd のコマンドとlsのコマンドを使いながらPostgresの場所を探します。

pg_hba.confを見つけました。

pg_hba.confのバックアップをとる

では下記のコマンドでオリジナルのファイルをコピーしておきます。

※パスワードをリセットしたらこっちに戻します。

cp pg_hba.conf pg_hba.conf-backup

ファイルがコピーで来たことを確認しました。

認証方法を変更する

ではテキストエディタを使ってこのpg_hba.confを開きます。

sudo nano pg_hba.conf


もともとはこんな感じになっていますね。

これを下記のように変えます。

Ctl +X で抜け出し Yで上書き、エンターでファイル名をそのままにします。

Postgresのサーバーをリスタートする

ではファイルを更新しただけではコンフィグを読み取ってくれないのでPostgresのサービスを再起動します。

sudo /etc/init.d/postgresql restart

postgresのユーザーで接続する

ここでコンフィグをtrustにしたのでどのユーザーでもパスワードなしで接続できるようになりました。

ではpostgresのユーザーで接続してみます。

psql -U postgres

パスワードなしで入れました。

パスワードを更新する

では更新したいユーザーのパスワードを下記のコマンドで更新します。

ALTER USER my_user_name with password 'my_secure_password';

例:
ALTER USER postgres with password 'Otsukare5555';

元のコンフィグファイルに戻す

パスワードなしで誰でも接続できてしまうのは危険なので、元のファイルに戻します。

cp pg_hba.conf-backup pg_hba.conf

Postgresサーバーのリスタート

同じようにPostgresのシステムを再起動します。

sudo /etc/init.d/postgresql restart

これでpsqlのコマンドでパスワードが聞かれたらもとに戻っているという事ですね。

ではお疲れ様です。