データベースロールは、権限を定義し、クライアント認証システムと相互作用する数多くの属性を持つことができます。
LOGIN
属性を持つロールのみがデータベース接続の初期ロール名として使用できます。
LOGIN
属性を持つロールは「データベースユーザ」と同じであるとみなすことができます。
ログイン権限を持つロールの作成方法は、以下のいずれかです。
CREATE ROLEname
LOGIN; CREATE USERname
;
(CREATE USER
はデフォルトで LOGIN
を持ち、CREATE ROLE
は持たないという点を除き、CREATE USER
はCREATE ROLE
と同じです。)
ログイン権限を除き、データベーススーパーユーザに対する権限検査は全て行われません。
これは危険な権限ですので、安易に使用してはいけません。
作業のほとんどを非スーパーユーザのロールで行うことが最善です。
新しいデータベーススーパーユーザを作成するには、CREATE ROLE
を使用してください。
これはスーパーユーザのロールで実行しなければなりません。
name
SUPERUSER
(全ての権限検査が行われないスーパーユーザを除き)ロールに明示的にデータベースを作成するための権限を指定しておかねばいけません。
そのようなロールを作るためにはCREATE ROLE
を使用してください。
name
CREATEDB
あるロールがロールを作成するには、明示的な権限が付与されていなければなりません。
(スーパーユーザは、すべての権限検査を迂回しますので、例外です。)
こうしたロールを作成するには、CREATE ROLE
を使用してください。
name
CREATEROLECREATEROLE
権限を持つロールは他のロールを変更したり削除したりすることもできます。
また、他のロールのメンバ資格を付与したり取り上げたりすることもできます。
ロールの変更には、たとえばパスワードの変更などを含む、ALTER ROLE
を使って実行できるほとんどの変更が含まれます。
また、COMMENT
とSECURITY LABEL
コマンドを使って実行できるロールの変更も含まれます。
しかし、CREATEROLE
では、SUPERUSER
ロールを作成する能力は移譲されませんし、既存のSUPERUSER
ロールに対する権限も移譲されません。
さらに、CREATEROLE
では、REPLICATION
ユーザを作成する機能も、REPLICATION
権限を付与または取り消す能力も、そのようなユーザのロール属性を変更する能力も移譲されません。
ただし、REPLICATION
ロールでのALTER ROLE ... SET
およびALTER ROLE ... RENAME
の使用、およびCOMMENT ON ROLE
、SECURITY LABEL ON ROLE
、DROP ROLE
の使用は許可されます。
最後に、CREATEROLE
では、BYPASSRLS
権限を付与または取り消す能力は付与されません。
CREATEROLE
権限を持つユーザは、(まだ)権限が付与されていないロールに対しても、メンバ資格の付与または取り消しを行うことができるため、CREATEROLE
ユーザは、pg_execute_server_program
やpg_write_server_files
などの高度な権限を持つロールを含む、システム内のすべての事前定義されたロールの機能への権限を取得できます。
あるロールがストリーミングレプリケーションの新規接続を実施するには、明示的な権限が付与されていなければなりません。
(スーパーユーザは、すべての権限検査を迂回しますので、例外です。)
ストリーミングレプリケーションを行うロールは、LOGIN
権限も持っていることが必要です。
こうしたロールを作成するには、CREATE ROLE
を使用してください。
name
REPLICATION LOGIN
パスワードは、クライアント認証方法においてデータベースに接続する際にユーザにパスワードを要求する場合にのみ重要になります。
password
とmd5
認証方式でパスワードが使用されます。
データベースパスワードはオペレーティングシステムのパスワードとは異なります。
ロール作成時にCREATE ROLE
のようにパスワードを指定します。
name
PASSWORD 'string
'
ロールには、デフォルトでメンバであるロールの権限を継承する権限が付与されます。
ただし、権限なしでロールを作成するには、CREATE ROLE
を使用します。
name
NOINHERIT
(全ての権限検査が行われないスーパーユーザを除き)ロールに明示的にすべての行単位セキュリティ(RLS)ポリシーをバイパスするための権限を指定しておかねばなりません。
そのようなロールを作るためには、スーパーユーザでCREATE ROLE
を使用してください。
name
BYPASSRLS
接続制限では、ロールが作成できる同時接続数を指定できます。
-1(デフォルト)は制限なしを意味します。
CREATE ROLE
でロール作成時に接続制限を指定します。
name
CONNECTION LIMIT 'integer
'
ロール属性は、ロールを作成した後でもALTER ROLE
コマンドで変更できます。
詳細はCREATE ROLEとALTER ROLEのマニュアルページを参照してください。
ロールは、第20章で説明されている実行時の設定の多くをロールごとのデフォルトに設定することもできます。 例えば何らかの理由で、自分が接続する時は常にインデックススキャンを無効にしたい場合(注:お勧めしません)、次のようにします。
ALTER ROLE myname SET enable_indexscan TO off;
このようにして設定を保存します(ただし、すぐに反映はされません)。
以降のこのロールによる接続においては、セッションの開始の直前にSET enable_indexscan TO off;
が呼び出されたのと同様になります。
これはデフォルトとする設定をするだけなので、設定をセッション途中いつでも変更できます。
ロール固有のデフォルト設定を削除するには、ALTER ROLE
を使用してください。
呼び出されることがありませんので、rolename
RESET varname
LOGIN
権限を持たないロールにロール固有のデフォルトを持たせることに意味がないことに注意してください。