HOME > 受験対策 > OSS-DB道場 > OSS-DB入門 > 第2回 ユーザ管理とセキュリティ

OSS-DB入門

Yahoo!ブックマークに登録

第2回 ユーザ管理とセキュリティ

前回はPostgreSQLをインストールしサーバーに接続するところまでを確認しました。
今回は、ユーザ管理とセキュリティの設定をテーマに取り扱います。前回のインストールで作成した環境を使い、実際に手を動かしながら読み進めてください。
なお、文中のSQLは予約語を大文字、それ以外を小文字で表記していますが、すべて小文字で入力しても実行可能です。

PostgreSQLにおけるユーザ

PostgreSQLはマルチユーザのデータベースです。どのユーザでデータベースに接続するかに応じて、実行できるSQLの権限を制御したり、特定のユーザに認証設定をかけたりするといった管理ができるようになっています。
PostgreSQLのインストール時にはデフォルトでユーザpostgresが作成されますが、ここでは、それ以外の新規ユーザの作成やユーザごとの認証設定を通じて、PostgreSQLのユーザ管理・セキュリティ設定について学んでいきたいと思います。

ユーザ操作

まずは端末を立ち上げてください。この時点では、Ubuntuにログインしたときのユーザ(ここでは"ossdb"と仮定します)になっていると思います。プロンプトの先頭はユーザ名@マシン名となっているので、そこを参考にユーザ名を確認してください。
ここで、PostgreSQLサーバーに接続するコマンド

$ psql

を打ってみましょう。次のようなメッセージが表示されるはずです。


図1. データベース接続エラー

PostgreSQLには"ossdb"というロール(ユーザと同じような意味だと捉えてください)が存在しないと言われてしまいました。
PostgreSQLのインストール時にデフォルトで作成されるユーザはpostgresのみですので、それ以外のユーザでアクセスするためには新規にユーザを登録する必要があります。

1. 登録ユーザの確認

一旦、ユーザpostgresに変更してからPostgreSQLサーバーに接続します。

$ su postgres
$ psql

登録ユーザを確認するには、次のようにpsqlのメタコマンドを使う方法と、SQLを使う方法とがあります。

  • psqlのメタコマンド: \du
  • SQL: SELECT * FROM pg_user;

\duを実行して、登録ユーザの一覧を表示させてみます。


図2. ユーザの一覧表示(初期状態)

登録ユーザはpostgresのみであることが分かります。ここに新規ユーザossdbを追加してみましょう。

2. 新規ユーザの登録

ユーザの登録にはCREATE USER文を利用します。

CREATE USER ossdb;
※"createuser ossdb"でも同じ結果が得られますが、createuserコマンドを利用する場合は、一旦データベースへの接続を切ってOS端末から実行する必要があります。

再度\duを実行してみましょう。ossdbが追加されていることが分かります。


図3. ユーザの一覧表示(新規ユーザ追加後))

2列目の値は、ユーザに付与されている権限を表しています。postgresが保有している権限はそれぞれ以下のような意味を持ちます。

Superuser:
"スーパーユーザ"であることを示します。 "スーパーユーザ"はデータベース内のアクセス制限をすべて変更することができます。
Create DB:
新規にデータベースを作成できることを示します。
Create Role:
新しいロール(=ユーザ)を作成できることを示します。 ロールを変更することも削除することもできます。
Replication:
ロールがストリーミングレプリケーションを初期化でき、システムをバックアップモードとの遷移が可能かどうかを決定します。

これらの権限はCREATE USER文のオプションで付与することができます。またユーザ作成後に変更する場合には、ALTER USER文を利用します。オプションの詳細は以下をご覧ください。

http://www.postgresql.jp/document/9.1/html/sql-createuser.html

3. 新規ユーザからの接続

さて、本当にユーザossdbからも接続できるようになったのでしょうか。
ユーザossdbに戻って確認してみましょう。(PostgreSQLサーバーから抜けるには\qを、postgresを抜けてossdbに戻るにはexitコマンドを使ってください。)

あらためて、ossdbユーザでpsqlコマンドを実行してみます。psqlのみだと、ユーザ名と同じ名前のデータベースに接続しようとするので、postgresデータベースに接続するよう明示的に指定します。


図4. ossdbユーザでのデータベース接続

PostgreSQLサーバーに接続できるようになったことが確認できました。
なお、プロンプトが「postgres=>」となっているのは、一般ユーザで接続していることを示しています。管理ユーザ(postgres)で接続した場合には「postgres=#」となります。

pg_hba.confの設定

設定ファイルであるpg_hba.confを使えば、データベース接続時の認証設定をユーザ毎に定義することができます。ここでは、ユーザossdbからデータベースに接続する際にパスワード認証を求めるように設定してみましょう。
まずはPostgreSQLユーザのossdbにパスワードを設定します。以下のようにALTER USER文を実行してください。


図5. ユーザのパスワード設定

続いてpg_hba.confを編集します。ファイルパスは/etc/postgresql/9.1/main/pg_hba.confとなります。デフォルトではユーザpostgresのみがpg_hba.confへの書き込み権限を持っているので、一度データベースへの接続を切って、ユーザpostgresに変更してから作業を行います。

\q
su postgres
vi /etc/postgresql/9.1/main/pg_hba.conf

pg_hba.confでは、接続元ホスト、接続先データベース、ユーザの組み合わせに対して認証方法を定義します。「Unixドメインソケットでユーザossdbから接続する場合にはパスワード認証を行う」ようにするには、次の図のように

local   all             ossdb                                    md5

を追加してください。


図6. pg_hba.confの編集

設定を反映させるために以下のコマンドを実行します。(ユーザpostgresで実行してください。ossdbには実行権限がありませんのでご注意ください。)

service postgresql reload

設定の再読み込みが完了したら、ユーザossdbに変更してデータベースへの接続を試してみます。


図7. ossdbユーザでのデータベース接続(パスワード認証あり)

パスワード認証が機能していることが確認できました。
pg_hba.confでは、他にも特定のユーザからの接続を拒絶したり、自社ドメインからの接続のみを受け付けるといった様々な設定が可能です。書式の詳細はオンラインマニュアルをご参照ください。
http://www.postgresql.jp/document/9.1/html/auth-pg-hba-conf.html

ネットワーク越しの接続

アプリケーションサーバーとデータベースサーバーといった構成でシステムを組むような場合など、ネットワーク越しにデータベースへアクセスする必要が出てくるケースがあります。ネットワーク接続の設定はpostgresql.confファイルで行います。
ここでは、ファイルの紹介だけにとどめ、特に設定の変更は行いません。
postgresql.confの中身を覗いてみましょう。ファイルパスは/etc/postgresql/9.1/main/postgresql.confとなります。
view /etc/postgresql/9.1/main/postgresql.conf
接続設定を定義する箇所は下図の通りです。


図8. postgresql.confの接続設定部分

listen_addressesにIPアドレスを追加することで、そのアドレスで接続を受け付けることができるようになります。"*"を指定すれば、ホスト側に設定されたすべてのネットワークインターフェースからの接続を受け付けるようになります。
また、ポート番号を変更したい場合にはportの値を変更してください。
listen_addressesの設定変更を反映させるためには、PostgreSQLを再起動(リロードではなく)する必要があります。ファイル変更後は、

service postgresql restart

を忘れずに行って下さい。

※postgresql.confのパラメータの中にはreloadで反映されるものとrestartが必要なものとが混在しています。ファイル中の"change requires restart"という記述の有無を参考にしてください。

なお、ネットワーク越しの接続認証についても、先で説明したpg_hba.confで設定することが可能です。

以上、具体例に沿ってユーザ管理とセキュリティ設定を見てまいりましたが、PostgreSQLでは、他にもより細かいレベルでユーザ権限を定義したり様々な条件で接続設定を行うことが可能です。設定・書式の詳細はオンラインマニュアルやオープンソースデータベース標準教科書などをご参照ください。

ページトップへ