PostgreSQL データベースへのユーザの追加

PostgreSQL ではロールを使用して、データベース クラスタおよびデータベースにログインします。ロールは、PostgreSQL データベース クラスタに追加します。

個人のデータベース ユーザは、ログイン ロールと呼ばれます。ログイン ロールがジオデータベース内のオブジェクトを所有する場合は、そのデータベースにスキーマも作成する必要があります。スキーマにはロールと同じ名前を付ける必要があります。また、ログイン ロールによって所有されていなければなりません。

グループ ロールを作成して、ログイン ロールを追加することもできます。その後、グループに追加されているすべてのログイン ロールに適用される権限をグループに対して付与することができます。

メモメモ:

グループの場合でも、グループ内のログイン ロールがジオデータベース内のオブジェクトを所有するときは、それぞれのログイン ロールに対応するスキーマを作成する必要があります。グループ ロール用のスキーマを作成することはできません。

PostgreSQL クライアント アプリケーション(pgAdmin III や PL/pgSQL)を使用して、PostgreSQL データベース クラスタにロールを作成できます。以下の手順は、PL/pgSQL を使用してロール、スキーマ、グループを作成し、ロールまたはグループに権限を付与する方法を示しています。

ヒントヒント:

SQL スクリプトの roles_schemas_privileges.sql が SDEHOME tools postgres にインストールされています。このスクリプトを変更して実行すると、ユーザとスキーマを作成し、データベースの権限を付与することができます。

手順:
  1. DBMS に他のロールを作成する権限を持つユーザとして PL/pgSQL にログインします。これのユーザは通常は postgres スーパー ユーザです。
  2. CREATE ROLE コマンドを実行します。

    この例では、暗号化パスワードを使用して、ログイン ロール role4u を作成します。ロールはデータベース内にオブジェクトを作成することができますが、スーパー ユーザではないため、グループから権限を継承したりデータベース クラスタ内にロールを作成したりすることはできません。

    CREATE ROLE role4u LOGIN 
    ENCRYPTED PASSWORD 'super.secret' 
    NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;

    ヒントヒント:

    このログインにグループを割り当てることがあらかじめわかっている場合は、INHERIT 権限を使用してログインを作成してください。

  3. CREATE SCHEMA コマンドを実行して、ジオデータベースを格納するデータベースにログイン ロールのスキーマを作成します。

    この例では、対応するスキーマを作成し、スキーマに対する認証を role4u ログインに付与します。

    CREATE SCHEMA role4u AUTHORIZATION role4u;

  4. ログイン ロールにスキーマの USAGE 権限と CREATE 権限を付与します。

    これが必要なのは、ユーザにログ ファイル テーブルの作成を許可するためです。詳細については、「PostgreSQL 用 ArcSDE ログ ファイル テーブル設定オプション」をご参照ください。

    GRANT USAGE ON SCHEMA role4u TO role4u;
    GRANT CREATE ON SCHEMA role4u TO role4u;
  5. ユーザのスキーマのデータにアクセスする必要のある他のログイン ロールまたはグループ ロールに、スキーマの USAGE 権限を付与します。この例では、public グループに USAGE 権限を付与し、データベースに接続するすべてのユーザが、role4u スキーマ内のデータにアクセスできるようにします。
    GRANT USAGE ON SCHEMA role4u TO public;
  6. ログインをグループに所属させて権限を制御する場合は、グループ ロールを作成します。

    たとえば、ジオデータベース内にデータを作成するすべてのログインが属するグループを作成できます。ここで、グループ ロール名は dataowner です。

    CREATE ROLE dataowner 
    NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;
  7. グループ ロール権限をすべての適用可能なログイン ロールに付与します。

    この例では、グループを role4u ログインに付与します。その他のログインをグループに追加するには、次のステートメントを実行します。

    GRANT dataowner TO role4u;
  8. グループから継承する権限を持たずに作成されたログイン ロール(このトピックの例を参照)に、その割り当て先グループからグループ権限を継承させることができます。
    ALTER ROLE role4u INHERIT;
  9. グループを使用する場合は、他のデータセットに関する権限をグループに付与できます。グループを使用しない場合は、個々のログイン ロールに権限を付与してください。

    この例の場合、dataowner グループには public スキーマの geometry_columns テーブルおよび spatial_ref_sys テーブルに関する権限が付与されます。これらは、PostGIS ジオメトリ格納を使用するデータを作成するユーザには必須の権限です。

    GRANT SELECT, INSERT, UPDATE, DELETE 
    ON public.geometry_columns 
    TO dataowner;
    
    GRANT SELECT 
    ON public.spatial_ref_sys 
    TO dataowner;

3/6/2012