您可以使用 SQL 在企业级地理数据库中创建表和要素类的视图,以限制视图用户可访问的列和记录,您也可以定义视图以从两个表或一个要素类和一个表中连接信息。如果视图定义中包含空间列,则视图用户可在 ArcGIS Desktop 客户端中可视化地图中的要素。
本主题中的示例介绍了如何在 PostgreSQL 数据库中创建视图。一个视图限制用户对特定列的访问。另一个视图显示两个不同表的内容。这些例基于具有以下定义的表:
员工的表定义
CREATE TABLE employees(
emp_id integer not null,
name varchar(32),
department smallint not null,
hire_date timestamp without time zone not null
);
区域的表定义
CREATE TABLE regions(
objectid integer not null,
r
emp_id integer not null,
rname varchar(32),
);
授予表权限
如果创建视图的用户不是该视图所依据的表的所有者,则表所有者必须至少授予视图创建者从表中进行选择的权限。
在本例中,视图所依据的表 (员工和区域) 归用户 gdb 所有。创建视图的用户是 rocket。
psql testdb gdb Enter password for user gdb:
GRANT SELECT ON gdb.employees TO rocket;
GRANT SELECT ON gdb.regions
TO rocket;
创建视图以限制访问
在本例中,用户 rocket 根据 employees 表创建视图 (view_dept_201),以将访问限制为部门编号为 201 的行:
psql testdb rocket Enter password for user rocket:
CREATE VIEW view_dept_201 AS SELECT emp_id, name, hire_date FROM gdb.employees
WHERE department = 201;
创建视图以连接两个表
在本例中,view—emp_regions_view 将空间表(要素类)与基于 emp_id 列的非空间表连接起来。视图包括区域要素类中的 ObjectID、空间列(region)和区域名称 (rname) 以及 employees 表中的员工姓名和 ID。
CREATE VIEW emp_regions_view AS SELECT (e.emp_name,e.emp_id,r.objectid,r.rname,r.region)
FROM employees e, regions r
WHERE e.emp_id = r.emp_id;
授予视图权限
您可将视图权限授予特定用户,而无需授予这些用户对基表(employees 和 regions)的访问权限。在本例中,将两个视图的 select 权限授予用户 dispatch_mgr:
GRANT SELECT ON rocket.view_dept_201 TO dispatch_mgr;
GRANT SELECT ON rocket.emp_region_view
TO dispatch_mgr;
dispatch_mgr 用户现在可以访问 view_dept_201 以查看各个部门全部 201 个员工的员工记录,并从 ArcMap 或 ArcGIS Pro 中的数据库连接访问 emp_region_view 以查看所有地区。当 dispatch_mgr 查询视图中的区域时,ArcGIS 将返回区域名称以及该区域中所有员工的名称和 ID。