Chapter 4. データベースユーザと権限

Table of Contents
4.1. データベースユーザ
4.2. ユーザ属性
4.3. グループ
4.4. 権限
4.5. 関数とトリガ

すべてのデータベースクラスタに、データベースユーザの集合が含まれます。これらのユーザは、サーバが稼働しているオペレーティングシステムによって管理されているユーザとは別のものです。ユーザはデータベースオブジェクト(たとえばテーブル)を所有しており、これらのオブジェクトについての権限を他のユーザに割り当てて、誰がどのオブジェクトにアクセスできるかを制御できます。

この章では、ユーザの作成と管理の方法について説明するとともに、権限システムについて紹介します。データベースオブジェクトのさまざまな型についての詳細情報は PostgreSQL 7.3 ユーザガイド に記載されています。

4.1. データベースユーザ

データベースユーザは概念的に、オペレーティングシステムユーザとは完全に異なります。実際にはユーザ名と一致させておくと便利ですが、必須ではありません。データベースユーザ名はデータベースクラスタインストレーションを通して共通です(個別のデータベースごとにではありません)。ユーザを作成するためにはSQLコマンドのCREATE USERを使います。

CREATE USER name

nameはSQL識別子のルールに従います。特殊な文字を持たない無装飾のものか、二重引用符に囲まれたもののどちらかです。既存のユーザを削除するためには類似のコマンド DROP USER を使います。

DROP USER name

便利なものとして、シェルのコマンドラインから呼び出せるプログラム createuserdropuser が、これらの SQL コマンドのラッパとして提供されています。

createuser name
dropuser name

データベースシステム自身を起動するために、初期化されたばかりのシステムはいつも定義済みのユーザを1人持ちます。このユーザは固定の ID 1 を持ち、デフォルトでは (initdb 実行時に変更しない限り) そのデータベースクラスタを初期化したオペレーティングシステムユーザと同じ名前となります。習慣的にこのユーザは postgres と名付けられます。さらにユーザを作る場合はまずこの初期ユーザで接続しなければいけません。

データベースサーバへの接続において、正確に 1 つのユーザ ID が活動中となります。特定のデータベース接続に使うユーザ名は、アプリケーション固有の方式で 接続要求を出すクライアントによって示されます。たとえば、psqlプログラムはコマンドラインオプション -Uを使って接続するユーザを示します。多くのアプリケーションでは、オペレーティングシステムの現在のユーザ名をデフォルトと仮定します (createuser および psql を含みます)。したがって、2 つのユーザの集合で名前を一致させておくと便利です。

与えられたクライアント接続が接続できるデータベースユーザの集合は、Chapter 6 で説明されているように、クライアント認証の設定によって決められます(したがって、ユーザのログイン名が本名と一致していなくてもかまわないのと同様に、クライアントは必ずしもオペレーティングシステムのユーザ名と同じ名前で接続する必要はありません)。接続したクライアントに付与される権限の内容はユーザ ID によって決定されるため、マルチユーザ環境を設定する際にはユーザ ID を注意深く設定することが重要です。