他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

第 17章データベースユーザと権限

目次
17.1. データベースユーザ
17.2. ユーザ属性
17.3. グループ
17.4. 権限
17.5. 関数とトリガ

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

この章では、ユーザの作成と管理の方法について説明するとともに、権限システムについて紹介します。 データベースオブジェクトの様々な種類や権限の効果についての詳細な情報は第5章に記載されています。

17.1. データベースユーザ

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

CREATE USER name;

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

DROP USER name;

便利なように、これらのSQLコマンドのラッパである、シェルのコマンドラインから呼び出し可能なcreateuserプログラムとdropuserプログラムが提供されています。

createuser name
dropuser name

既存のユーザ群を求めるためには、以下のようにpg_userシステムカタログを確認してください。

SELECT usename FROM pg_user;

また、psqlプログラムの\duメタコマンドも既存のユーザを列挙する際に役に立ちます。

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

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

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