CentOS6の環境にPostgreSQL環境を構築したときのメモ。
(別段たいしたことはやってない)
インスト手順
yumでインスト出来るのでインスト手順は省略。
まず起動
デフォルトでは、/var/lib/pgsql/dataにDBが作成されていないとpostgresqlサービスを起動出来ない。
まずデータベースを作成して、それから起動する。
[root@centos6 ~]# service postgresql start /var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first. [失敗] [root@centos6 ~]# ls /var/lib/pgsql/data [root@centos6 ~]# service postgresql initdb データベースを初期化中: [ OK ] [root@centos6 ~]# service postgresql start postgresql サービスを開始中: [ OK ]
サービスの自動起動設定
デフォルトでは自動起動はoffになってるのでonにする。
[root@centos6 ~]# chkconfig --list |grep postgre postgresql 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@centos6 ~]# chkconfig postgresql on [root@centos6 ~]# chkconfig --list |grep postgre postgresql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ユーザ作成
デフォルトのpostgresユーザと別のユーザを作成し、DBインスタンスの作成権限を与える。
ユーザはログイン時のパスワード指定も必要とする。
-bash-4.1$ psql psql (8.4.13) "help" でヘルプを表示します. postgres=# \du ロール一覧 ロール名 | 属性 | メンバー ----------+--------------------+---------- postgres | スーパーユーザ | {} : ロールを作成できる : DBを作成できる postgres=# create user mokky with password 'mokkypasswd' createdb; CREATE ROLE postgres=# \du ロール一覧 ロール名 | 属性 | メンバー ----------+--------------------+---------- mokky | DBを作成できる | {} postgres | スーパーユーザ | {} : ロールを作成できる : DBを作成できる
データベース作成
postgres=# create database mokkydb owner = mokky; CREATE DATABASE postgres=# \l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+----------+------------------+-------------+-------------------+---- ------------------- mokkydb | mokky | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/ postgres : pos tgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/ postgres : pos tgres=CTc/postgres (4 行) postgres=#
新しく作成したDBにログイン
-bash-4.1$ psql -U mokky -d mokkydb; psql: FATAL: ユーザ"mokky"のIdent認証に失敗しました
、、しようとしたらエラー。
このIdent認証というのは、「Linux 上のアカウントと PostgreSQL のアカウントが一致しないとエラーにする」設定のことだそう。
なので、postgresqlログインアカウントに対応するUnixアカウントを作成する。
[root@centos6 ~]# useradd mokky [root@centos6 ~]# passwd mokky ユーザー mokky のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: 全ての認証トークンが正しく更新できました。
mokkyユーザで再度ログイン。
-bash-4.1$ su - mokky パスワード: [mokky@centos6 ~]$ psql -U mokky -d mokkydb; psql (8.4.13) "help" でヘルプを表示します. mokkydb=>
ログイン出来た。パスワード聞かれなかったけど。。
(後日追記)
パスワード認証を行うには、 /var/lib/pgsql/data/pg_hba.conf に設定が必要。
# TYPE DATABASE USER ADDRESS METHOD local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust host all all 0.0.0.0/0 password
上記設定だと、ローカルホストからのアクセスはパスワードなしでアクセス可能、ローカル以外のv4アドレスのクライアントからのアクセスはパスワード認証付きでアクセス可能になる。
なお、METHOD=passwordだと、パスワードが平文で送られるようなので、ネットワークセキュリティの考慮が必要な環境では別のメソッドが必要。
認証方式についてはここあたりに記述があった。