無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

20.2. ロールの属性

データベースロールは、権限を定義し、クライアント認証システムと相互作用する数多くの属性を持つことができます。

ログイン権限

LOGIN 属性を持つロールのみがデータベース接続の初期ロール名として使用できます。 LOGIN 属性を持つロールは "データベースユーザ" と同じであるとみなすことができます。 ログイン権限を持つロールの作成方法は、以下のいずれかです。

CREATE ROLE 

name

 LOGIN;
CREATE USER 

name

;

CREATE USER はデフォルトで LOGIN を持ち、 CREATE ROLE は持たないという点を除き、 CREATE USER CREATE ROLE と同じです。)

スーパーユーザ状態

ログイン権限を除き、データベーススーパーユーザに対する権限検査は全て行われません。 これは危険な権限ですので、安易に使用してはいけません。 作業のほとんどを非スーパーユーザのロールで行うことが最善です。 新しいデータベーススーパーユーザを作成するには、 CREATE ROLE name SUPERUSER を使用してください。 これはスーパーユーザのロールで実行しなければなりません。

データベース作成

(全ての権限検査が行われないスーパーユーザを除き)ロールに明示的にデータベースを作成するための権限を指定しておかねばいけません。 そのようなロールを作るためには CREATE ROLE name CREATEDB を使用してください。

ロールの作成

あるロールがロールを作成するには、明示的な権限が付与されていなければなりません。 (スーパーユーザは、すべての権限検査を迂回しますので、例外です。) こうしたロールを作成するには、 CREATE ROLE name CREATEROLE を使用してください。 CREATEROLE 権限を持つロールは他のロールを変更したり削除したりすることもできます。 また、他のロールのメンバ資格を付与したり取り上げたりすることもできます。 しかし、スーパーユーザロールの変更、削除、メンバ資格の変更を行うにはスーパーユーザ状態が必要です。 CREATEROLE だけでは不足しています。

レプリケーションの新規接続

あるロールがストリーミングレプリケーションの新規接続を実施するには、明示的な権限が付与されていなければなりません。 (スーパーユーザは、すべての権限検査を迂回しますので、例外です。) ストリーミングレプリケーションを行うロールは、常に LOGIN 権限が持っていることが必要です。 こうしたロールを作成するには、 CREATE ROLE name REPLICATION LOGIN を使用してください。

パスワード

パスワードは、クライアント認証方法においてデータベースに接続する際にユーザにパスワードを要求する場合にのみ重要になります。 password md5 認証方式でパスワードが使用されます。 データベースパスワードはオペレーティングシステムのパスワードとは異なります。 ロール作成時に CREATE ROLE name PASSWORD 'string' のようにパスワードを指定します。

ロール属性は、ロールを作成した後でも ALTER ROLE コマンドで変更できます。 詳細は CREATE ROLE ALTER ROLE のマニュアルページを参照してください。

ティップ: スーパーユーザ以外に CREATEDB 権限と CREATEROLE 権限を持つロールを作成することを勧めます。 そして、このロールを使用して、データベースとロールを管理するためのすべての処理を行ってください。 この方法によって、実際には不要な処理をスーパーユーザとして行う危険性を避けることができます。

ロールは、 第18章 で説明されている実行時の設定の多くをロールごとのデフォルトに設定することもできます。 例えば何らかの理由で、自分が接続する時は常にインデックススキャンを無効にしたい場合(注:お勧めしません)、次のようにします。

ALTER ROLE myname SET enable_indexscan TO off;

このようにして設定を保存します(ただし、すぐに反映はされません)。 以降のこのロールによる接続においては、セッションの開始の直前に SET enable_indexscan TO off; が呼び出されたのと同様になります。 これはデフォルトとする設定をするだけなので、設定をセッション途中いつでも変更できます。 ロール固有のデフォルト設定を削除するには、 ALTER ROLE rolename RESET varname を使用してください。 呼び出されることがありませんので、 LOGIN 権限を持たないロールにロール固有のデフォルトを持たせることに意味がないことに注意してください。


powered by SEO.CUG.NET