miércoles, 12 de marzo de 2008

Procedimiento para dar permisos a un usuario sobre un conjunto de tablas

El objetivo es realizar un procedimiento que reciba como argumento un usuario, y cuya función sea dar permisos de lectura a todas nuestras tablas, salvo aquellas por ejemplo que comiencen por TMP.
Es posible añadir condiciones adcionales para filtrar las tablas a las que queremos dar permisos, de modo que sólo tablas con un nombre determinado sean las que tengan permisos de lectura.

Para ello usamos un CURSOR y lo recorremos mediante un blucle.

create or replace
PROCEDURE permisos( USER IN VARCHAR2) AS
CURSOR tablas IS
select table_name from user_tables where table_name not like 'TMP%'
table_name VARCHAR2(255);

BEGIN
OPEN tablas;
FETCH tablas INTO table_name;
WHILE tablas%found
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON ' || table_name || ' TO "' || USER || '"';
FETCH tablas INTO table_name;
END LOOP;
CLOSE tablas;
COMMIT;

END;

De esta forma y con tan solo llamar a una función podemos automatizar el otorgar privilegios a otros usuarios.

No hay comentarios: