例:SQL を使用して Oracle にデータベース ビューを作成する

複雑性: 初級 データ要件: 独自データの使用

SQL を使用して、エンタープライズ ジオデータベース内のテーブルおよびフィーチャクラスのビューを作成できます。

このトピックの例では、Oracle 内に単純なビューを作成して、ユーザからのアクセスを特定の列に制限します。この例は、以下の定義を持つテーブルに基づいています。

CREATE TABLE employees (
  emp_id      number(38) unique not null,
  name        varchar2(32),
  department  number not null,
  hire_date   date not null);

テーブルに関する権限の付与

ビューを作成するユーザがビューの基になるテーブルの所有者でない場合、テーブルの所有者はビューの作成者に少なくともテーブルの SELECT 権限を付与する必要があります。ビューの所有者がビューの権限を他のユーザに付与する必要がある場合、テーブルの所有者はビューの所有者に、権限を他のユーザに付与する権限を付与する必要があります。

この例では、ビューの基になるテーブル(employees)はユーザ gdb が所有しています。ビューを作成しているユーザは、ユーザ rocket です。また、rocket ユーザはビューの権限を他のユーザに付与する必要があります。したがって、gdb ユーザは rocket ユーザに employees テーブルの SELECT 権限を付与し、rocket がビューの SELECT 権限を他のユーザに付与できるように WITH GRANT OPTION を指定する必要があります。

conn gdb/gdb.bdg

GRANT SELECT 
ON gdb.employees 
TO rocket WITH GRANT OPTION;

ビューの作成

この例では、ユーザ rocket が employees テーブルを基にビューを作成し、部署番号が 201 のレコードのみにアクセスを制限しています。

CREATE VIEW view_dept_201 
AS SELECT (emp_id,name,department,hire_date)
FROM gdb.employees 
WHERE department = 201;

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

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

conn rocket/nopeeking

GRANT SELECT ON rocket.view_dept_201 TO mgr200;

権限のテスト

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

conn mgr200/topsecret

SELECT * FROM rocket.view_dept_201; 

EMP_ID     NAME       DEPT     HIRE_DATE 
112        LOLLI POP  201      06/30/2007 
134        VAN CHIN   201      10/15/2007 
150        DON GUN    201      03/01/2009

期待どおり、部署 201 の従業員のレコードだけが返されます。

5/10/2014