カテゴリー
Linux

【改善】PostgreSQL 最初の一歩!ユーザと DB 作成!確認!【おれはやった!】

yum でインストール直後の PostgreSQL 最初の一歩として、

  1. PostgreSQL スーパーユーザー postgres にパスワード postgrespass 設定
  2. PostgreSQL 内にユーザ testuser 作成
  3. PostgreSQL 内のユーザ testuser 用のデータベース testdb 作成、そしてパスワード testpass 設定
  4. データベース 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 認証設定」をおこなっていなかったため、ユーザにパスワードを設定しても意味がありませんでした。今回勉強して、そこのところを理解でき、嬉しいです♪

以上です。

コメントを残す