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'

3/6/2012