データベースロールは概念的に、オペレーティングシステムユーザとは完全に分離されています。
実行する上でユーザ名を一致させておくと便利ですが、必須ではありません。
データベースロール名はデータベースクラスタインストレーション全体で共通です
(個別のデータベースごとではありません)。
ユーザを作成するためにはCREATE ROLE
SQLコマンドを使います。
CREATE ROLE name
;
name
はSQL識別子の規則に従います。
特殊な文字を持たない無装飾のものか、二重引用符に囲まれたもののどちらかです。
(現実的には、通常他のオプション、例えばLOGIN
などをこのコマンドに付与することになるでしょう。
詳細は後で説明します。)
既存のユーザを削除するためには類似のコマンドDROP ROLE
を使用してください。
DROP ROLE name
;
利便性のために、これらのSQLコマンドのラッパーである、シェルのコマンドラインから呼び出し可能なcreateuserプログラムとdropuserプログラムが提供されています。
createusername
dropusername
既存のロール群を求めるためには、以下のようにpg_roles
システムカタログを確認してください。
SELECT rolname FROM pg_roles;
あるいはログインできるロールだけを確認するには以下のようにします。
SELECT rolname FROM pg_roles WHERE rolcanlogin;
また、psqlプログラムの\du
メタコマンドも既存のロールを列挙する際に役に立ちます。
データベースシステム自身を起動するために、初期化されたばかりのシステムは常に定義済みでログイン可能なロールを1つ持ちます。
このロールは必ず「スーパーユーザ」であり、異なる名前を指定しない限り、initdb
でそのデータベースクラスタを初期化したオペレーティングシステムユーザと同じ名前となります。
このロールはしばしばpostgres
と名付けられます。
ロールを追加する場合はまずこの初期ロールで接続しなければいけません。
すべてのデータベースサーバへの接続は、特定のロールの名前を使用して確立し、そのロールによりその接続で発行されるコマンドの初期のアクセス権限が決まります。
特定のデータベース接続に使うロールは、アプリケーション固有の方式で接続要求を開始するクライアントによって指示されます。
例えば、psql
プログラムでは、-U
コマンドラインオプションを使って接続するロールを指示します。
多くのアプリケーション(createuser
およびpsql
を含む)では、オペレーティングシステムの現在のユーザ名をデフォルトと想定します。
したがって、ロールとオペレーティングシステムのユーザの組み合わせ間で名前を一致させておくと便利です。
第21章で説明されているように、あるクライアント接続で与えられたデータベースロールの集合は、クライアント認証設定で決定された内容で接続できます。 (したがって、ユーザのログイン名が本名と一致していなくても構わないのと同様に、クライアントはオペレーティングシステムのユーザ名と同じロール名で接続しなくても構いません)。 接続したクライアントに付与される権限の内容はロールIDによって決定されるため、マルチユーザ環境を設定する際には権限を注意深く設定することが重要です。