Вы можете использовать SQL для создания представлений таблиц и классов пространственных объектов в многопользовательской базе геоданных, чтобы ограничить доступ пользователей к столбцам или записям, или вы можете задать представление для объединения информации из двух таблиц или класса пространственных объектов и таблицы. При включении пространственного столбца в представление пользователи могут визуализировать объекты на карте в клиенте ArcGIS Desktop.
В примерах этого раздела показано, как создавать представления в базе данных IBM Db2. Одно из представлений ограничивает доступ пользователя к определенным столбцам. Другое представление применяется для отображения содержания двух различных таблиц. Эти примеры основаны на таблицах со следующими определениями:
Определение таблицы для сотрудников
CREATE TABLE employees(
emp_id integer not null,
name varchar(32),
department smallint not null,
hire_date date not null
);
Определение таблицы для регионов
CREATE TABLE regions( objectid integer not null, emp_id integer not null, reg_id integer not null, rname varchar(32), region st_geometry
);
Предоставление прав доступа к таблицам
Если создающий представление пользователь не является владельцем таблицы или таблиц в этом представлении, владелец таблиц должен предоставить ему как минимум право выборки в этих таблицах.
В данном примере таблицы, на базе которых построены представления (employees и regions), принадлежат пользователю gdb. Представление создается пользователем rocket.
db2 => connect to testdb user gdb using gdb.dbg
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = GDB
Local database alias = TESTDB
db2 => GRANT SELECT
ON employees
TO USER rocket;
db2 => GRANT SELECT
ON regions
TO USER rocket;
Создание представления для ограничения доступа
В этом примере пользователь rocket создает представление (view_dept_201) таблицы employees, чтобы ограничить доступ только к тем строкам, где подразделение соответствует значению 201:
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 10.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;
Создание представления для соединения двух таблиц
В этом примере представление emp_regions_view соединяет пространственную таблицу (класс объектов) с непространственной таблицей по столбцу emp_id. Представление включает в себя ObjectID, пространственный столбец (region) и имя региона (rname) из класса объектов regions, а также имя и ID сотрудника из таблицы employees.
connect to testdb user gdb using gdb.dbg
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = GDB
Local database alias = TESTDB
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). В данном примере пользователю dispatch_mgr предоставлено право доступа к обоим представлениям:
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 10.5.5
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => GRANT SELECT
ON rocket.view_dept_201
TO USER dispatch_mgr;
db2 => GRANT SELECT
ON rocket.emp_region_view
TO USER dispatch_mgr;
Теперь пользователь dispatch_mgr может получить доступ к view_dept_201, чтобы просмотреть записи всех сотрудников отдела 201 и получить доступ к emp_region_view из подключения к базе данных в ArcMap или ArcGIS Pro, чтобы просмотреть все регионы. Когда dispatch_mgr запрашивает в представлении регион, ArcGIS возвращает название региона, а также имя и ID всех работников в этом регионе.