GRANT TRUNCATE en Oracle

Oracle-logo

El grant de TRUNCATE no existe. La opción como DBA es dar el rol de sistema DROP ANY TABLE, que no es muy recomendable.

La solución sería crear un procedimiento almacenado en el propietario de las tablas y darle el GRANT EXECUTE  al usuario sobre ese procedimiento almacenado. Como el procedimiento almacenado se ejecuta con las credenciales del propietario, haría el TRUNCATE sin ningún problema

CREATE OR REPLACE PROCEDURE TRUNCA_TABLA(TABLA IN VARCHAR2)
AS
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || TABLA;
END;

Posterior, entonces otorgaremos los permisos al usuario

GRANT EXECUTE ON "HR"."TRUNCA_TABLA" TO SOYUNDBA;

La forma de ejecutar el truncare, en este caso desde el usuario SOYUNDBA es:

EXECUTE HR.TRUNCA_TABLA('DATOS');

Finalmente, al momento de realizar la validación de la data, evidenciamos que la tabla ya no cuenta con ningún registro .

Por otro lado tambien puede ser útil crear un sinónimo con el fin de no tener que realizar el llamado al esquema para poder utilizar el procedimiento.

CREATE SYNONYM SOYUNDBA.TRUNCA_TABLA FOR HR.TRUNCA_TABLA;
GRANT EXECUTE ON HR.TRUNCA_TABLA TO SOYUNDBA;

De esta manera, para realizar el llamado seria de la siguiente forma:

EXECUTE TRUNCA_TABLA('DATOS');

Te invito a seguir consultando más articulos relacionados a Oracle dando clic aquí.

 

Acerca de JulianOrtiz0506

Soy administrador de bases de datos y desarrollador web, desde mis inicios en el mundo de la informática, he implementando proyectos personales y empresariales. Por consiguiente esto me ha permitido contar con una amplia calificación y destreza sobre mis áreas de conocimiento. Sobre todo suelo estar en constante aprendizaje, diariamente me estoy informando sobre nuevas tecnologías. Ya queme gusta estar actualizado en la tecnología de punta para todas las plataformas que me apasionan y con las cuales trabajo día a día.

Ver todas las entradas de JulianOrtiz0506 →

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *