PostgreSQLユーザーとデータベースの作り方

いつも忘れる・・というかMySQLやらOracleやらDB2やらをいじっていると混同してしまってユーザーやデータベースなどの作り方を忘れるので、メモです。PostgreSQLはインストール済みの前提です。

ユーザーの作成には、createuserコマンドを使います。

-bash-4.2$ createuser -P -d -e -E -r sakura
新しいロールのためのパスワード: <<<新しいユーザ(ロール)に設定するパスワード>>>
もう一度入力してください: <<<新しいユーザ(ロール)に設定するパスワード>>>
パスワード: <<<スーパーユーザー(postgres)のパスワード>>>
CREATE ROLE sakura ENCRYPTED PASSWORD 'md50c19948520b2b13256fc0faf59f3614c' NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
-bash-4.2$

細かいオプションについてはドキュメントを参照してください。-Pオプションでパスワードの設定、-dでDB作成権限、-rでロール(追加ユーザー)の作成権限などを与えます。Webアプリのユーザー(ロール)であればここまで必要ないかもしれません。

つづいてデータベースの作成には、createdbコマンドを使います。

-bash-4.2$ createdb --encoding=utf8 --owner=sakura --template=template1 sakura
パスワード:
-bash-4.2$

こちらも細かいオプションについてはドキュメントを参照してください。

これでDBの準備は整ったので、データベースに接続できるか試してみます。

-bash-4.2$ psql --username=sakura sakura
psql: FATAL:  ユーザ "sakura" で対向(peer)認証に失敗しました
-bash-4.2$

こんな感じで拒否られてしまったら、pg_hba.confの修正が必要です。ちなみにこれは、OSのユーザーとpostgreSQLに接続しようとしたユーザーが合致しない場合に発生するようです。

pg_hba.confを修正します。既存の設定のうち、一番先頭のlocal  all all…行のMETHOD(認証方式)がpeerになっていたら、これをmd5にします。ついでに他のホストから接続するときのために、一番下の行を追加します。ちなみにhost all all 10.8.0.1/24 md5のような指定でも良いのですが、関係ないユーザーが他のDBに接続できるというのはイマイチ気持ち悪いので、ユーザーごとに接続できるDBを分けています。

data/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            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident
host    postgres        postgres        10.8.0.1/24             md5
host    sakura          sakura          10.8.0.1/24             md5

修正したら、systemctl reload postgresqlで再起動します。

-bash-4.2$ psql --username=sakura sakura
ユーザ sakura のパスワード:
psql (9.2.23)
"help" でヘルプを表示します.

sakura=>
sakura=>

これで接続できればOKです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください