Ejemplo: Crear una vista de base de datos en DB2 con el comando sdetable

Puede utilizar el comando sdetable para crear una vista en una geodatabase en IBM DB2. Al hacer esto se registra automáticamente la vista con ArcSDE.

El ejemplo de este tema muestra cómo se puede utilizar una vista creada con sdetable para restringir el acceso de usuario a datos específicos. El ejemplo se basa en una tabla con la siguiente definición:

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

Tenga en cuenta que la tabla contiene una columna de enteros, no nulos que se puede utilizar como un Id. de fila de ArcSDE.

Cree una vista con el comando sdetable

Supongamos que desea que el administrador del departamento 101 vea todas las columnas de la tabla de empleados pero sólo las filas para los empleados en el departamento 101. Utilice sdetable para crear una vista con todas las filas para las que el número de departamento es 101. La opción –w especifica la cláusula WHERE de la consulta almacenada con la definición de vista.

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:db2 -s mydb2server -D testdb  Attribute        Administration Utility __________________________________ Successfully created view view_dept_101.

Para obtener más información acerca del comando sdetable, consulte la Referencia sobre el comando de administración.

El comando sdetable define la vista del catálogo de sistema DB2, como si la hubiese creado usted mismo mediante el comando DB2 CREATE VIEW. Para ver esto, consulte la vista del sistema DB2 SYSCAT.VIEWS.

db2 => SELECT viewschema, viewname, text  FROM syscat.views  WHERE viewname = 'VIEW_DEPT_101';

VIEWSCHEMA

VIEWNAME

TEXT

GDB

VIEW_DEPT_101

CREATE VIEW view_dept_101  AS SELECT = emp_id, name, department, hire_date  FROM GDB.EMPLOYEES  WHERE department = 101

View_dept_101 en SYSCAT.VIEW

ArcSDE agrega el nombre del propietario al nombre de la tabla en la consulta. Si crea una vista propia con el Lenguaje estructurado de consultas (SQL), esto no se realiza automáticamente a menos que califique el nombre de la tabla al crear la vista.

Observe que los nombres de la vista y el propietario cambian a mayúscula antes de almacenarse en SYSCAT.VIEWS. Esto lo realiza DB2, no ArcSDE. Por lo tanto, al consultar estos valores de texto específicos, debe escribirlos en mayúscula.

PrecauciónPrecaución:

Algunos usuarios crean vistas registradas con sdetable –o create_view y alteran la definición de la vista mediante SQL. Esto se lleva a cabo para evitar una compleja sintaxis de línea de comandos sdetable –o create_view (en especial la opción –c) o para incluir una definición de vista más compleja o extendida, como la que utiliza conexiones a bases de datos externas. Aunque alterar una vista puede resolver algunos problemas, también es posible crear una vista que no funcione bien con ArcSDE o los clientes de ArcSDE como ArcGIS Desktop.

Otorgar privilegios en la vista

El propietario de la vista puede otorgar privilegios en la vista a usuarios específicos sin tener que otorgarle a estos usuarios acceso a la tabla base (empleados). En este ejemplo, al usuario mgr100 se le otorgan privilegios selectos en la vista, view_dept_101:

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 view_dept_101 TO USER mgr100; DB20000I  The SQL command completed successfully.
NotaNota:

En este ejemplo, el propietario de la tabla y el propietario de la vista son el mismo usuario. Si fueran diferentes, el propietario de la tabla debería otorgarle privilegios de selección en la tabla al propietario de la vista, además de la capacidad de otorgar selección a otros usuarios. Si el privilegio se otorga mediante SQL, incluya WITH GRANT OPTION en el estamento. Si el privilegio se otorga mediante el comando sdetable con la operación de otorgamiento, se debe especificar la opción (–I) heredada.

Probar privilegios

Inicie sesión como mgr100 y seleccione registros en view_dept_101.

db2 => connect to testdb user mgr100 using mgr100    Database Connection Information  Database server        = DB2 9.5.5  SQL authorization ID   = MGR100  Local database alias   = TESTDB  db2 => 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  

Como se esperaba, sólo se devuelven los registros para los empleados en el departamento 101.

Las vistas existen como objetos de esquema, independientemente de las tablas que las completan. En la siguiente consulta, el usuario mgr100 no tiene acceso a la tabla, empleados, de modo que para mgr100 la tabla de empleados no existe.

db2 => SELECT * FROM gdb.employees; SQL0551N  "MGR100" does not have the privilege to perform operation "SELECT"  on object "GDB.EMPLOYEES".  SQLSTATE=42501

7/10/2012