Example: Creating a database view in Informix using the sdetable command
You can use the sdetable command to create a view in a geodatabase in IBM Informix. Doing so automatically registers the view with ArcSDE.
このトピックの例では、特定のデータへのユーザ アクセスを制限するために sdetable コマンドを使用してビューを作成する方法を示します。例は次のように定義されたテーブルに基づいています。
CREATE TABLE employees(emp_id integer not null, name varchar(32), department smallint not null, hire_date datetime not null);
テーブルには、ArcSDE の RowID として使用できる NULL でない整数列が含まれています。
Create a view using the sdetable command
部署 101 の管理者に、employees テーブルで部署 101 の従業員の行についてのみ、すべての列を表示させたい場合を考えます。sdetable コマンドを使用して、部署番号が 101 のすべての行からなるビューを作成します。-w オプションは、ビューの定義に格納されるクエリの WHERE 句を指定します。
sdetable -o create_view -T view_dept_101 -t employees -c 'emp_id,name,department,hire_date' -w "department = 101" -u gdb -p gdb.bdg -i sde:informix -s myidsserver -D testdb
sdetable コマンドの詳細については、『コマンド リファレンス』をご参照ください。
The sdetable command defines the view in the Informix sysviews system catalog table, just as it would if you created the view using Structured Query Language (SQL). You can query the sysviews system table to see this.
Grant privileges on the view
ビューの所有者は、ビューの権限を特定のユーザに付与することができます。また、これらのユーザにベース テーブル(employees)へのアクセスを許可する必要はありません。この例では、ユーザ mgr100 はビュー view_dept_101 の SELECT 権限を付与されています。
GRANT SELECT ON view_dept_101 TO mgr100;
この例では、テーブルの所有者とビューの所有者は同じユーザです。これらの所有者が異なるユーザである場合、テーブルの所有者はビューの所有者にテーブルの SELECT 権限と、他のユーザに SELECT 権限を付与する権限を与えます。SQL を使用して権限を付与する場合は、ステートメントに WITH GRANT OPTION を指定します。sdetable コマンドに grant 操作を指定して権限を付与する場合は、継承(-I)オプションを指定します。
Test privileges
mgr100 としてログインし、view_dept_101 のレコードを選択します。
SELECT * FROM gdb.view_dept_101; emp_id name dept hire_date 29 YAN WU 101 04/15/2002 67 LEE VAN 101 11/01/2004 78 SUE CHOO 101 05/31/2005 105 DAN HO 101 10/01/2006 111 ANN ANG 101 12/15/2006 135 BILL BO 101 10/15/2007
期待どおり、部署 101 の従業員のレコードだけが返されます。
ビューはそれらに設定されるテーブルにかかわらず、スキーマ オブジェクトとして存在します。次のクエリでは、ユーザ mgr100 に employees テーブルにアクセスする権限がないため、employees テーブルが存在しないことを示すメッセージが返されています。
SELECT * FROM gdb.employees; Invalid object name 'gdb.employees'