jueves, 16 de diciembre de 2010

Controlando el Acceso a los Datos A través de Vistas

A veces necesitamos controlar el acceso a los datos por columnas o filas, esto se puede realizar fácilmente a través de Vistas. 
En este caso asumiremos que no podemos crear la vista con el dueño del esquema,crearemos  dos usuarios, uno llamado us_consulta que contendrá una  vista del esquema scott y otro llamado us_con_clerk que tendrá solo permisos sobre la vista.

C:\oraclexe>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 15 13:38:44 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

--- Creamos los dos usuarios ---
SQL> create user us_consulta identified by  consulta;
User created.
SQL> create user us_cons_clerk identified by consulta;
User created.

--- Asignamos Permisos ---
SQL> grant create session to us_consulta;
Grant succeeded.
SQL> grant create view to us_consulta,us_cons_clerk ;
Grant succeeded.   

--- Le damos permiso sobre la tabla emp al usuario us_consulta
--- ES muy importante otorgar el permiso con with grant option
--- Para que el usuario us_consulta pueda otorgar el permiso sobre la vista
--- a Otros usuarios
c:\> scott/tiger
SQL> grant select on emp to us_consulta with grant option;
Grant succeeded.

--- Creamos la vista, filtrada por donde necesitamos
SQL> connect us_consulta/consulta
Connected.
SQL> create view VW_CLERK as select * from scott.emp where job='CLERK';
View created.
-- Asignamos permiso
SQL> grant select on vw_clerk to us_cons_clerk;
Grant succeeded.

--- Ya el usuario tiene permiso sobre los datos pero filtrados
SQL> connect us_cons_clerk/consulta
Connected.
SQL> select empno, ename, job, hiredate, sal
  2  from us_consulta.vw_clerk;

     EMPNO ENAME      JOB       HIREDATE         SAL
---------- ---------- --------- --------- ----------
      7369 SMITH      CLERK     17-DEC-80        800
      7876 ADAMS      CLERK     23-MAY-87       1100
      7900 JAMES      CLERK     03-DEC-81        950
      7934 MILLER     CLERK     23-JAN-82       1300

No hay comentarios:

Publicar un comentario