例:SQL を使用して PostgreSQL でデータベース ビューを作成する
SQL を使用して、エンタープライズ ジオデータベース内のテーブルおよびフィーチャクラスのビューを作成できます。
このトピックの例では、PostgreSQL 内に単純なビューを作成して、ユーザからのアクセスを特定の列に制限します。この例は、以下の定義を持つテーブルに基づいています。
CREATE TABLE employees(emp_id integer not null, name varchar(32),
department smallint not null, hire_date timestamp without time zone not null
テーブルに関する権限の付与
ビューを作成するユーザがビューの基になるテーブルの所有者でない場合、テーブルの所有者はビューの作成者に少なくともテーブルの SELECT 権限を付与する必要があります。ビューの所有者がビューの権限を他のユーザに付与する必要がある場合、テーブルの所有者はビューの所有者に、権限を他のユーザに付与する権限を付与する必要があります。
この例では、ビューの基になるテーブル(employees)はユーザ gdb が所有しています。ビューを作成しているユーザは、ユーザ rocket です。また、rocket ユーザはビューの権限を他のユーザに付与する必要があります。したがって、gdb ユーザは rocket ユーザに employees テーブルの SELECT 権限を付与し、rocket がビューの SELECT 権限を他のユーザに付与できるように WITH GRANT OPTION を指定する必要があります。
psql testdb gdb
Enter password for user gdb:
GRANT SELECT ON gdb.employees TO rocket WITH GRANT OPTION;
ビューの作成
この例では、ユーザ rocket が employees テーブルを基にビューを作成し、部署番号が 201 のレコードのみにアクセスを制限しています。
psql testdb rocket
Enter password for user rocket:
CREATE VIEW view_dept_201
AS SELECT emp_id, name, hire_date
FROM gdb.employees
WHERE department = 201;
ビューに対する権限の付与
ビューの権限を特定のユーザに付与することができます。また、これらのユーザにベース テーブル(employees)へのアクセスを許可する必要はありません。この例では、ユーザ mgr200 は ビュー view_dept_201 の SELECT 権限を付与されています。
GRANT SELECT ON rocket.view_dept_201 TO mgr200;
権限のテスト
mgr200 としてログインし、view_dept_201 のレコードを選択します。
psql testdb mgr200
Enter password for mgr200:
SELECT * FROM rocket.view_dept_201;
emp_id name hire_date
112 LOLLI POP 2007-06-30 08:44:38
134 VAN CHIN 2007-10-15 07:41:20
150 DON GUN 2009-03-01 15:39:05
期待どおり、部署 201 の従業員のレコードだけが返されます。