Ejemplo: Crear una vista de base de datos en DB2 con SQL

Complejidad: Principante Requisito de datos: Utilizar datos propios

Puede utilizar SQL para crear una vista en las tablas y clases de entidad en una geodatabase corporativa.

El ejemplo de este tema muestra cómo crear una vista simple en IBM DB2 para restringir el acceso de usuario a columnas específicas. El ejemplo se basa en una tabla con la siguiente información:

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

Otorgar privilegios en la tabla

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 poder otorgarle privilegios en la vista a otros usuarios, el propietario de la tabla debe otorgarle al propietario de la vista la capacidad para otorgar privilegios a otros usuarios.

En este ejemplo, la tabla en la que se basa la vista (empleados) pertenece al usuario gdb. El usuario que crea la vista es el usuario rocket. Además, el usuario rocket debe otorgar privilegios en la vista a otros usuarios. Por lo tanto, el usuario gdb debe otorgarle al usuario rocket el privilegio de selección en la tabla de empleados e incluir WITH GRANT OPTION para que rocket pueda otorgarle a otros usuarios los privilegios SELECT en la vista.

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.

Crear una vista

En este ejemplo, el usuario rocket crea una vista en la tabla de empleados para restringir el acceso solo a aquellos registros en los que el departamento es 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.

Otorgar privilegios en 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 mgr200 se le otorgan privilegios SELECT en la vista, view_dept_201:

db2 => connect to testdb user rocket using nopeeking    Database Connection Information  Database server        = DB2 9.7.4  SQL authorization ID   = ROCKET  Local database alias   = TESTDB  db2 => GRANT SELECT ON view_dept_201 TO USER mgr200; DB20000I  The SQL command completed successfully.

Probar privilegios

Inicie sesión como mgr200 y seleccione registros en view_dept_201:

db2 => connect to testdb user mgr200 using mgr200    Database Connection Information  Database server        = DB2 9.7.4  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

Como se esperaba, solo se devuelven los registros para los empleados en el departamento 201.

9/11/2013