データベースロールは、権限を定義し、クライアント認証システムと相互作用する数多くの属性を持つことができます。
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
権限を持つロールは他のロールを変更したり削除したりすることもできます。
また、他のロールのメンバ資格を付与したり取り上げたりすることもできます。
しかし、スーパーユーザロールの変更、削除、メンバ資格の変更を行うにはスーパーユーザ状態が必要です。
CREATEROLE
だけでは不足しています。
あるロールがストリーミングレプリケーションの新規接続を実施するには、明示的な権限が付与されていなければなりません。
(スーパーユーザは、すべての権限検査を迂回しますので、例外です。)
ストリーミングレプリケーションを行うロールは、LOGIN
権限も持っていることが必要です。
こうしたロールを作成するには、CREATE ROLE
を使用してください。
name
REPLICATION LOGIN
パスワードは、クライアント認証方法においてデータベースに接続する際にユーザにパスワードを要求する場合にのみ重要になります。
password
とmd5
認証方式でパスワードが使用されます。
データベースパスワードはオペレーティングシステムのパスワードとは異なります。
ロール作成時にCREATE ROLE
のようにパスワードを指定します。
name
PASSWORD 'string
'
ロール属性は、ロールを作成した後でもALTER ROLE
コマンドで変更できます。
詳細はCREATE ROLEとALTER ROLEのマニュアルページを参照してください。
スーパーユーザ以外にCREATEDB
権限とCREATEROLE
権限を持つロールを作成することを勧めます。
そして、このロールを使用して、データベースとロールを管理するためのすべての処理を行ってください。
この方法によって、実際には不要な処理をスーパーユーザとして行う危険性を避けることができます。
ロールは、第20章で説明されている実行時の設定の多くをロールごとのデフォルトに設定することもできます。 例えば何らかの理由で、自分が接続する時は常にインデックススキャンを無効にしたい場合(注:お勧めしません)、次のようにします。
ALTER ROLE myname SET enable_indexscan TO off;
このようにして設定を保存します(ただし、すぐに反映はされません)。
以降のこのロールによる接続においては、セッションの開始の直前にSET enable_indexscan TO off;
が呼び出されたのと同様になります。
これはデフォルトとする設定をするだけなので、設定をセッション途中いつでも変更できます。
ロール固有のデフォルト設定を削除するには、ALTER ROLE
を使用してください。
呼び出されることがありませんので、rolename
RESET varname
LOGIN
権限を持たないロールにロール固有のデフォルトを持たせることに意味がないことに注意してください。