yum でインストール直後の PostgreSQL 最初の一歩として、
- PostgreSQL スーパーユーザー postgres にパスワード postgrespass 設定
- PostgreSQL 内にユーザ testuser 作成
- PostgreSQL 内のユーザ testuser 用のデータベース testdb 作成、そしてパスワード testpass 設定
- データベース testdb、PostgreSQL ユーザ testuser、Linux ユーザ testuser の削除
をやってみようと思います。
なお、バージョンは現時点(2013年4月3日)で最新の 9.2 をインストールしました。ですのでコマンドが「postgresql」ではなく、「postgresql-9.2」となっております。
0−1.はじめに。PostgreSQL 初期化と起動
バージョン 8.X の場合はコマンドから「-9.2」を除いて同様にすれば OK です。
# PostgreSQL 初期化 /etc/init.d/postgresql-9.2 initdb # PostgreSQL 起動 /etc/init.d/postgresql-9.2 start
0−2.PostgreSQL 認証設定
# PostgreSQL 認証設定 # 設定ファイルをバックアップ cp -ap /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.2/data/pg_hba.conf.org # 設定ファイルを編集 vim /var/lib/pgsql/9.2/data/pg_hba.conf
psql で PostgreSQL プロンプトにログインする際に、パスワード認証を使うように編集します。
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident
↓
# 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
設定ファイルをもう一つ編集します。psql でプロンプトに入ってから、PostgreSQL ユーザのパスワードを設定する時に暗号化されるように編集します。
# PostgreSQL ユーザのパスワード設定時の暗号化設定 # 編集前にバックアップ cp -ap /var/lib/pgsql/9.2/data/postgresql.conf /var/lib/pgsql/9.2/data/postgresql.conf.org # 設定ファイルを編集 vim /var/lib/pgsql/9.2/data/postgresql.conf
編集内容はたったの一点で、コメントを外すだけです。
#password_encryption = on
↓
password_encryption = on
これで OK です。なのですが、ここで注意点があります。まだ PostgreSQL を再起動してはいけません。なぜかといいますと、まだスーパーユーザにパスワードを設定していないためです。今再起動すると、設定していませんのにスーパーユーザで psql にログインするときにパスワードを求められ、ログインできなくなります。
1.PostgreSQL スーパーユーザー postgres にパスワード設定
psql へログインします。設定ファイルでパスワードを求めるように設定しましたが、PostgreSQL を再起動しておりませんのでこの段階ではまだパスワードの入力は求められません。
# PostgreSQL へスーパーユーザでログイン # まずは Linux ユーザを PostgreSQL 用のユーザに変更 su - postgres # PostgreSQL のプロンプトにログイン psql
次の SQL でスーパーユーザ postgres にパスワードを設定します。今回は「postgrespass」としました。
-- postgres ユーザにパスワードを設定 ALTER USER postgres ENCRYPTED PASSWORD 'postgrespass';
ここで PostgreSQL を再起動します。スーパーユーザにパスワードを設定しましたので、再起動直後から psql でのログインにパスワードを求められるようになります。
# PostgreSQL を再起動し、設定を反映 /etc/init.d/postgresql-9.2 restart
2.PostgreSQL 内にユーザ testuser 作成。
3.PostgreSQL 内のユーザ testuser 用のデータベース testdb 作成、そしてパスワード testpass 設定
2 番めと 3 番目を一気に行ってしまいます。わたくしはいつも、ユーザとデータベースはセットで作成いたしますので。psql のプロンプトでの操作になります。
-- ユーザを作成し、パスワードを設定 CREATE USER testuser WITH NOSUPERUSER NOCREATEDB NOCREATEROLE PASSWORD 'testpass'; -- データベースを作成し、所有者を設定 CREATE DATABASE testdb WITH OWNER testuser ENCODING 'UTF8';
オプションを軽く整理いたします。
- CREATE USER
- NOSUPERUSER スーパーユーザとしない
- NOCREATEDB データベース作成を許可しない
- NOCREATEROLE ユーザ作成を許可しない
- CREATE DATABASE
- ENCODING エンコーディングを設定
★番外★ psql プロンプトでユーザ一覧、ユーザパスワード有無、データベース一覧の確認コマンド
次で削除してしまいますので、確認用のコマンドを掲載します。おまけでテーブル確認系のコマンドも 2 つ載せています。
-- データベース一覧 \l -- ユーザ名・属性一覧 \du -- ユーザパスワード設定有無 select usename,passwd from pg_shadow; -- テーブル一覧 \dt -- テーブル・シーケンス一覧 \d
4.データベース testdb、PostgreSQL ユーザ testuser、Linux ユーザ testuser の削除
-- ユーザとそのデータベースの削除 DROP DATABASE testdb; DROP USER testuser;
おわりに
今回の投稿は、以前の次の投稿のやり直しです。
この時は「0−2.PostgreSQL 認証設定」をおこなっていなかったため、ユーザにパスワードを設定しても意味がありませんでした。今回勉強して、そこのところを理解でき、嬉しいです♪
以上です。