Puede utilizar SQL para crear una vista en las tablas y clases de entidad de una geodatabase corporativa para restringir qué columnas o registros están disponibles para los usuarios de vistas, o bien definir una vista para unir información de dos tablas o una clase de entidad y una tabla. Al incluir la columna espacial en la definición de la vista, los usuarios de la vista pueden visualizar las entidades de un mapa en un cliente de ArcGIS Desktop.
Los ejemplos de este tema muestran cómo crear vistas en una base de datos de Oracle. Una vista restringe el acceso del usuario a columnas concretas. La otra vista presenta contenido de dos tablas distintas. Los ejemplos se basan en tablas con las siguientes definiciones:
Definición de tabla para empleados
CREATE TABLE employees (
emp_id number(38) unique not null,
name varchar2(32),
department number not null,
hire_date date not null
);
Definición de tabla para regiones
CREATE TABLE employees ( objectid number(38) unique not null, reg_id number(38) unique not null, emp_id number(38) not null, rname nvarchar(32), region st_geometry
);
Otorgar privilegios en las tablas
Si el usuario que crea la vista no es el propietario de la tabla o las tablas en las que se basa la vista, el propietario de la tabla debe otorgarle al creador de la vista como mínimo el privilegio de selección en la tabla. Si el propietario de la vista necesita otorgar privilegios en la vista a otros usuarios, el propietario de la tabla debe otorgarle al propietario de la vista la capacidad para otorgar privilegios en la tabla a otros usuarios.
En este ejemplo, las tablas en las que se basan las vistas (empleados y regiones) son propiedad del usuario gdb. El usuario que crea las vistas es el usuario rocket. Además, rocket otorgará privilegios en las vistas a otros usuarios. Por lo tanto, gdb debe otorgar a rocket el privilegio para seleccionar en la tabla de empleados y regiones e incluir WITH GRANT OPTION para que rocket pueda otorgar a otros usuarios los privilegios SELECT en las vistas.
conn gdb/gdb.bdg
GRANT SELECT
ON gdb.employees
TO rocket WITH GRANT OPTION;
GRANT SELECT
ON gdb.regions
TO rocket WITH GRANT OPTION;
Crear una vista para restringir el acceso
En este ejemplo, el usuario rocket crea una vista (view_dept_201) en la tabla de empleados para restringir el acceso solo a aquellas filas en las que el departamento es 201:
CREATE VIEW view_dept_201
AS (SELECT emp_id,name,department,hire_date)
FROM gdb.employees
WHERE department = 201;
Crear una vista para unir dos tablas
En este ejemplo, la vista —emp_regions_view— une una tabla espacial (clase de entidad) a una tabla no espacial basada en la columna emp_id. La vista incluye el ObjectID, la columna espacial (region) y el nombre de la región (rname) de la clase de entidad de regiones junto con el nombre del empleado y el Id. de la tabla de empleados.
CREATE VIEW emp_region_view AS SELECT (e.emp_name,e.emp_id,r.rname,r.objectid,r.region)
FROM employees e,region r
WHERE e.emp_id = r.emp_id;
Otorgar privilegios en la vista
Puede otorgar privilegios en las vistas a usuarios específicos sin tener que otorgarle a estos usuarios acceso a las tablas base (empleados y regiones). En este ejemplo, se otorga al usuario dispatch_mgr privilegios seleccionados para ambas vistas:
conn rocket/nopeeking
GRANT SELECT ON rocket.view_dept_201
TO dispatch_mgr;
El usuario dispatch_mgr puede acceder ahora a view_dept_201 para ver registros de empleados de todos los empleados del departamento 201 y acceder a emp_region_view desde una conexión de base de datos en ArcMap o ArcGIS Pro para ver todas las regiones. Cuando dispatch_mgr consulta una región en la vista, ArcGIS devuelve el nombre de la región y el nombre y el Id. de todos los empleados de dicha región.