示例:使用 SQL 在 DB2 中创建数据库视图并将其注册到 ArcSDE

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

可使用 SQL 命令在 ArcSDE 地理数据库中创建视图。要通过 ArcGIS 查询视图,必须将视图注册到 ArcSDE。

要将视图注册到 ArcSDE,用于创建视图的基础表必须包含符合条件的行 ID 列。行 ID 是唯一的非空整型列,ArcSDE 使用这些列来唯一标识表或视图中的行。虽然创建视图时可以不注册行 ID 列,但这种视图的功能会受到限制,因为 ArcGIS 中的选择和查询操作需要使用注册的行 ID 列。

本主题中的示例介绍如何将使用 SQL 在 IBM DB2 中创建的视图注册到 ArcSDE。该示例基于具有以下定义的表:

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

请注意,该表包含一个可用作 ArcSDE 行 ID (emp_id) 的非空整型列。必须将此列包含在视图定义中,才能将其注册到 ArcSDE。

授予表权限

如果创建视图的用户不是该视图所依据的表的所有者,则表所有者必须至少授予视图创建者从表中进行选择的权限。如果视图所有者需要将视图权限授予其他用户,则表所有者还必须授予视图所有者向其他用户授权的权限。

在本例中,视图所依据的表 (employees) 归用户 gdb 所有。创建视图的用户是 rocket。此外,rocket 用户还必须将视图权限授予其他用户。因此,gdb 用户必须向 rocket 用户授予从 employees 表中进行选择的权限并且还包括 WITH GRANT OPTION,以使 rocket 用户能够将视图的 select 权限授予其他用户。

db2 => connect to testdb user gdb using gdb.dbg
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = GDB
 Local database alias   = TESTDB

db2 => GRANT SELECT 
ON employees 
TO USER rocket WITH GRANT OPTION;

DB20000I  The SQL command completed successfully.

创建视图

在本例中,用户 rocket 根据 employees 表创建视图,以将访问限制为部门编号为 201 的记录。

db2 => connect to testdb user rocket using nopeeking
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = ROCKET
 Local database alias   = TESTDB

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

DB20000I  The SQL command completed successfully.

授予视图权限

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

db2 => connect to testdb user rocket using nopeeking
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = ROCKET
 Local database alias   = TESTDB

db2 => GRANT SELECT ON view_dept_201 TO USER mgr200;
DB20000I  The SQL command completed successfully.

测试权限

以 mgr200 身份登录并从 view_dept_201 中选择记录。

db2 => connect to testdb user mgr200 using mgr200
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = MGR200
 Local database alias   = TESTDB

db2 => 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

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

将视图注册到 ArcSDE

要通过 ArcGIS 客户端应用程序查询或选择视图中的记录,必须将视图注册到 ArcSDE。通过将视图注册到 ArcSDE,会将记录添加到 ArcSDE TABLE_REGISTRY 系统表。

使用 sdetable 命令的 register 操作注册视图。只有视图所有者才能将其注册到 ArcSDE。因此,在注册 view_dept_201 时,必须通过 sdetable 命令提供 rocket 用户名和密码。

sdetable -o register -t rocket.view_dept_201 -c emp_id -C SDE 
-i sde:dbe -s mydb2server -D testdb -u rocket -p nopeeking

在本例中,行 ID (emp_id) 注册为由 ArcSDE 维护。如果视图为只读,则可将行 ID 注册为由用户维护。

有关 sdetable 命令的详细信息,请参阅管理命令参考


7/10/2012