PostgreSQL データベースへのユーザの追加
PostgreSQL ではロールを使用して、データベース クラスタおよびデータベースにログインします。ロールは、PostgreSQL データベース クラスタに追加します。
個人のデータベース ユーザは、ログイン ロールと呼ばれます。ログイン ロールがジオデータベース内のオブジェクトを所有する場合は、そのデータベースにスキーマも作成する必要があります。スキーマにはロールと同じ名前を付ける必要があります。また、ログイン ロールによって所有されていなければなりません。
グループ ロールを作成して、ログイン ロールを追加することもできます。その後、グループに追加されているすべてのログイン ロールに適用される権限をグループに対して付与することができます。
グループの場合でも、グループ内のログイン ロールがジオデータベース内のオブジェクトを所有するときは、それぞれのログイン ロールに対応するスキーマを作成する必要があります。グループ ロール用のスキーマを作成することはできません。
PostgreSQL クライアント アプリケーション(pgAdmin III や PL/pgSQL)を使用して、PostgreSQL データベース クラスタにロールを作成できます。以下の手順は、PL/pgSQL を使用してロール、スキーマ、グループを作成し、ロールまたはグループに権限を付与する方法を示しています。
SQL スクリプトの roles_schemas_privileges.sql が SDEHOME → tools → postgres にインストールされています。このスクリプトを変更して実行すると、ユーザとスキーマを作成し、データベースの権限を付与することができます。
- DBMS に他のロールを作成する権限を持つユーザとして PL/pgSQL にログインします。これのユーザは通常は postgres スーパー ユーザです。
-
CREATE ROLE コマンドを実行します。
この例では、暗号化パスワードを使用して、ログイン ロール role4u を作成します。ロールはデータベース内にオブジェクトを作成することができますが、スーパー ユーザではないため、グループから権限を継承したりデータベース クラスタ内にロールを作成したりすることはできません。
CREATE ROLE role4u LOGIN ENCRYPTED PASSWORD 'super.secret' NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;
ヒント:このログインにグループを割り当てることがあらかじめわかっている場合は、INHERIT 権限を使用してログインを作成してください。
-
CREATE SCHEMA コマンドを実行して、ジオデータベースを格納するデータベースにログイン ロールのスキーマを作成します。
この例では、対応するスキーマを作成し、スキーマに対する認証を role4u ログインに付与します。
CREATE SCHEMA role4u AUTHORIZATION role4u;
- ログイン ロールにスキーマの USAGE 権限と CREATE 権限を付与します。
これが必要なのは、ユーザにログ ファイル テーブルの作成を許可するためです。詳細については、「PostgreSQL 用 ArcSDE ログ ファイル テーブル設定オプション」をご参照ください。
GRANT USAGE ON SCHEMA role4u TO role4u; GRANT CREATE ON SCHEMA role4u TO role4u;
-
ユーザのスキーマのデータにアクセスする必要のある他のログイン ロールまたはグループ ロールに、スキーマの USAGE 権限を付与します。この例では、public グループに USAGE 権限を付与し、データベースに接続するすべてのユーザが、role4u スキーマ内のデータにアクセスできるようにします。
GRANT USAGE ON SCHEMA role4u TO public;
-
ログインをグループに所属させて権限を制御する場合は、グループ ロールを作成します。
たとえば、ジオデータベース内にデータを作成するすべてのログインが属するグループを作成できます。ここで、グループ ロール名は dataowner です。
CREATE ROLE dataowner NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;
-
グループ ロール権限をすべての適用可能なログイン ロールに付与します。
この例では、グループを role4u ログインに付与します。その他のログインをグループに追加するには、次のステートメントを実行します。
GRANT dataowner TO role4u;
-
グループから継承する権限を持たずに作成されたログイン ロール(このトピックの例を参照)に、その割り当て先グループからグループ権限を継承させることができます。
ALTER ROLE role4u INHERIT;
-
グループを使用する場合は、他のデータセットに関する権限をグループに付与できます。グループを使用しない場合は、個々のログイン ロールに権限を付与してください。
この例の場合、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;