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 userSQLはログイン権限オプション(login)を明示しなくても有効となりますし、createuserコマンドでもログイン権限オプション(–login)がデフォルトで有効なので、ここでは指定していません。この辺りのSQLやコマンドの挙動はPostgreSQLバージョンにも依ると思うので自信の無い場合はログイン権限オプションを明示した方がいいかもしれません。