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