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

20.1. データベースロール

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

CREATE ROLE 

name

;

name はSQL識別子の規則に従います。 特殊な文字を持たない無装飾のものか、二重引用符に囲まれたもののどちらかです。 (現実的には、通常他のオプション、例えば LOGIN などをこのコマンドに付与することになるでしょう。 詳細は後で説明します。) 既存のユーザを削除するためには類似のコマンド DROP ROLE を使用してください。

DROP ROLE 

name

;

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

createuser 

name


dropuser 

name

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

SELECT rolname FROM pg_roles;

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

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

すべてのデータベースサーバへの接続は、特定のロールの名前を使用して確立し、そのロールによりその接続で発行されるコマンドの初期のアクセス権限が決まります。 特定のデータベース接続に使うロールは、アプリケーション固有の方式で接続要求を開始するクライアントによって指示されます。 例えば、 psql プログラムでは、 -U コマンドラインオプションを使って接続するロールを指示します。 多くのアプリケーション( createuser および psql を含む)では、オペレーティングシステムの現在のユーザ名をデフォルトと想定します。 したがって、ロールとオペレーティングシステムのユーザの組み合わせ間で名前を一致させておくと便利です。

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


powered by SEO.CUG.NET