LoginSignup
1
2

More than 5 years have passed since last update.

postgresql で全く存在しないユーザーに管理者権限を付けてパスワードログインするまで

Posted at

まず、postgresql をインストールした時に設定している管理者ユーザー権限が必要。
ここが一番難しいようにも思うけど...

linux で rpm や deb パッケージでインストールしたならば postgres ユーザーが OS に登録されるので、OSの管理者権限でログインして

# su -u postgres
$ psql ...

とか

$ sudo -u postgres psql ...

のように起動できなければ、たぶん道は無いと思う。

Windows の場合は postgers ユーザー権限で実行するとか、どうやればいいんでしょうね?

前提として、インストール時の初期設定で postgres のデータベースパス(環境変数なら PGDATA の値)を探し出して、 pg_hba.conf ファイルを見つけて、認証方法の設定が trust (OSユーザー認証) になっていないと上の方法で postgres にアクセスできませんので確認してください。

鶏卵的には pg_hba.conf は、psql でデータベースに接続された状態で

=# SHOW hba_file;

を実行すれば、どこの pg_hba.conf ファイルを見ているか判ります。ログインできれば。

  • linux では /var/postgres とか /var/lib/postgres あたりがありがち
  • brew on Mac では /usr/local/var/postgres でした
  • windows は... たぶんインストーラーが最後に表示していたと思うよ

ユーザーロール作成

$ create user -P <user name>
$ psql postgres
=# ALTER ROLE "<user name>" WITH LOGIN SUPERUSER ENCRYPTED PASSWORD '<user password>';

管理者権限で、ログイン可能で、暗号化パスワード

ついでに今ログインしているユーザーのパスワードも付けておきます。

=# ALTER ROLE "<default postgres>" WITH ENCRYPTED PASSWORD '<password>';

認証方法の変更

pg_hba.conf の変更

pg_hba.conf
...
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

METHOD を ident から md5 に変更

postgres の再起動

pg_ctlservice postgres/etc/init.d/postgres などで postgresql の再起動をして、ログインできるか試します。

$ psql -U <user name> -h localhost -W postgres
Password: 

ユーザーのパスワードでログインきれば OK です。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2