CentOS6でPostgreSQLインストール
Rails4でBootstrap3を使う(ついでにherokuへpush)で書いたエントリーからPostgreSQL
インストール手順を抜き出しただけのエントリーです。
PostgreSQLの準備
PostgreSQLインストール
PostgreSQLの公式yumレポジトリからインストールします。
1 2 |
|
PostgreSQLインストール直後のデータベースディレクトリである/var/lib/pgsql/9.3/data
を削除してデータベースを初期化(initdb
)し、postgresql-9.3サービス
を起動します。ついでに、自動起動も設定します。
1 2 3 4 |
|
PostgreSQLの認証方式をPeerからTrustへ変更
https://www.postgresql.jp/document/9.3/html/auth-methods.html
PostgreSQLではデフォルトの認証方式としてPeer認証
が設定されています。Peer認証とは、カーネルからクライアント上のシステムユーザ名を取得し、PostgreSQLデータベースユーザと同一である場合のみ接続が許可される仕組みです。PostgreSQLでは、デフォルトではpostgres
データベースユーザしか存在しないため、UnixユーザもPostgreSQLをパッケージインストールすると作成されているpostgres
である必要があります(su - postgres
しないとダメということ)。
Peer認証
だとUnixのスーパーユーザであるroot
であってもpostgresデータベースユーザへの接続は許可されません。
1 2 3 4 5 |
|
今回は、サーバに接続できる全Unixユーザから全データベースユーザへの接続が許可されるTrust認証
に変更します。
Peer認証
からTrust認証
への変更は/var/lib/pgsql/9.3/data/pg_hba.conf
を修正します。
1 2 |
|
設定ファイルを修正したのでpostgresql-9.3
サービスを再起動します。
1
|
|
Railsアプリケーション用のデータベースユーザを作成
PostgreSQL 9.3ではCREATE USERはCREATE ROLEの別名になりました。 唯一の違いは、CREATE USERという名前でコマンドが呼び出されると、デフォルトでLOGINになり、CREATE ROLEという名前でコマンドが呼び出されると、デフォルトでNOLOGINとなる点です。
https://www.postgresql.jp/document/9.3/html/sql-createuser.html
PostgreSQLのスーパーユーザであるpostgres
データベースユーザで接続します。
1
|
|
今回作成するRailsアプリケーションのプロジェクト名と同一のbootstrap3_sample
というデータベースユーザを作成し、データベース作成権限とログイン権限を持つように設定します。
1
|
|
上記SQLは以下コマンドと同じ効果があります
1
|
|
createuser
コマンドはpostgresql93(末尾の数字はバージョン番号なので適宜目置換を!)
RPMパッケージに付属しているPostgreSQLのデータベースユーザ(正確にはロール)を作成するためのコマンドです。SQLでのユーザ作成とは異なり、コマンドでパスワード文字列を指定することは出来ず、-Pオプション
によってパスワード文字列を指定するプロンプトが表示されます。
データベースユーザのパスワードがシステムカタログ上に保存される際に暗号化するかどうかはENCRYPTED/UNENCRYPTED
で明示するか、そうでない場合は、/var/lib/pgsql/9.3/data/postgresql.conf
のpassword_encryption
設定パラメータに依ります。password_encryption
設定パラメータがonの場合に暗号化が有効(default: on)です。
先述した通り、create user
SQLはログイン権限オプション(login)を明示しなくても有効となりますし、createuser
コマンドでもログイン権限オプション(–login)がデフォルトで有効なので、ここでは指定していません。この辺りのSQLやコマンドの挙動はPostgreSQLバージョンにも依ると思うので自信の無い場合はログイン権限オプションを明示した方がいいかもしれません。