示例:使用 sdetable 命令在 Informix 中创建数据库视图

复杂性:入门级 数据要求:使用自备的数据

可使用 sdetable 命令在 IBM Informix 的地理数据库中创建视图。这会将视图自动注册到 ArcSDE。

本主题中的示例介绍如何使用 sdetable 创建视图来限制用户对特定数据的访问。该示例基于具有以下定义的表:

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

请注意,该表包含一个可用作 ArcSDE 行 ID 的非空整型列。

使用 sdetable 命令创建视图

假设您想让 department 101 的管理者查看 employees 表中的所有列,但只查看 department 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 命令的详细信息,请参阅管理命令参考

sdetable 命令用于定义 Informix sysviews 系统目录表中的视图,就好像您使用结构化查询语言 (SQL) 创建视图一样。您可以查询 sysviews 系统表来了解这一点。

授予视图权限

视图所有者可将视图权限授予特定用户,而无需授予这些用户对基表 (employees) 的访问权限。在本例中,将视图 view_dept_101 的 select 权限授予用户 mgr100:

GRANT SELECT ON view_dept_101 TO mgr100;
注意注意:

在本例中,表所有者与视图所有者是同一位用户。如果不是同一位用户,表所有者需要授予视图所有者相应的权限,使其能够在表中进行选择并且还能将 select 权限授予其他用户。如果使用 SQL 授权,请在语句中包括 WITH GRANT OPTION。如果使用 sdetable 命令的 grant 操作授权,则必须指定继承 (–I) 选项。

测试权限

以 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

像预期一样,只返回了 department 101 中的雇员记录。

视图以方案对象形式存在,与填充视图的表无关。在以下查询中,由于用户 mgr100 无权访问 employees 表,所以会向用户 mgr100 显示 employees 表不存在。

SELECT * FROM gdb.employees;

Invalid object name 'gdb.employees'

3/7/2012