例:sdetable コマンドを使用して SQL Server でデータベース ビューを作成する

難易度: 初級 データ要件 独自のデータを使用

sdetable コマンドを使用して、Microsoft SQL Server のジオデータベースにビューを作成することができます。この操作により、ビューは自動的に ArcSDE に登録されます。

このトピックの例では、特定のデータへのユーザ アクセスを制限するために sdetable コマンドを使用してビューを作成する方法を示します。例は次のように定義されたテーブルに基づいています。

CREATE TABLE employees(
  emp_id integer not null, 
  name nvarchar(32), 
  department smallint not null, 
  hire_date datetime2 not null
);

テーブルには、ArcSDE の RowID として使用できる NULL でない整数列が含まれています。

sdetable コマンドを使用したビューの作成

部署 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 "where department = 101" –u gdb –p gdb.bdg 
–i sde:sqlserver:server1\ssinstance2 -D testdb

Attribute        Administration Utility
__________________________________
Successfully created view view_dept_101.

sdetable コマンドの詳細については、『コマンド リファレンス』をご参照ください。

sdetable コマンドは、SQL Server データベース 内のビューを定義します。SQL Server の INFORMATION_SCHEMA.VIEWS システム ビューを検索して、データベースの定義を確認することができます。

USE testdb;

SELECT table_name,view_definition
FROM information_schema.view_dept_101
WHERE table_name = 'view_dept_101';

TABLE_NAME

VIEW_DEFINITION

view_dept_101

CREATE VIEW view_dept_101 AS SELECT emp_id,name,department,hire_date FROM employees WHERE department=101

SQL Server のシステム ビューにおける View_dept_101 の定義
注意注意:

sdetable -o create_view コマンドを使用して登録済みのビューを作成した後、SQL を使用してビューの定義を変更することがあります。これは、複雑な sdetable -o create_view コマンド ライン構文(特に -c オプション)を避けるためか、外部データベースへの接続を使用するものなど、より複雑または拡張されたビュー定義を使用するためです。ビューを変更することで問題を解決できることもありますが、それにより ArcSDE や、ArcGIS Desktop などの ArcSDE クライアントにうまく対応しないビューが作成される可能性があります。

ビューに関する権限の付与

ビューの所有者は、ビューの権限を特定のユーザに付与することができます。また、これらのユーザにベース テーブル(employees)へのアクセスを許可する必要はありません。この例では、ユーザ mgr100 はビュー view_dept_101 の SELECT 権限を付与されています。

GRANT SELECT ON view_dept_101 TO mgr100;
メモメモ:

この例では、テーブルの所有者とビューの所有者は同じユーザです。これらの所有者が異なるユーザである場合、テーブルの所有者はビューの所有者にテーブルの SELECT 権限と、他のユーザに SELECT 権限を付与する権限を与えます。SQL を使用して権限を付与する場合は、ステートメントに WITH GRANT OPTION を指定します。sdetable コマンドに grant 操作を指定して権限を付与する場合は、継承(-I)オプションを指定します。

権限のテスト

mgr100 としてログインし、view_dept_101 のレコードを選択します。

EXECUTE AS USER = 'mgr100';

SELECT * FROM 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;

Message 208, Level 16, State 1, Line 1
Invalid object name 'gdb.employees'

3/6/2012