Título: quitar privilegios en oracle
Publicado por: d91 en 5 Octubre 2015, 04:26 am
hola, estoy trabajando con oracle desde una aplicacion en .net, desde la app creo un usuario y le doy privilegios, y desde la misma app le tengo que quitar esos privilegios, en la creacion y dar privilegios no hay problema pero al momento de quitarlos da este error ORA-01031: insufficient privileges
la linea de codigo que ejecuto en el procedimiento almacenado es este EXECUTE immediate 'Revoke create session FROM '||nombre;
el privilegio que estoy quitando es para que ya no se pueda conectar a la base de datos, lo unico es que al hacerlo desde la consola no hay problema, aunque lo hago con el mismo usuario que es propietario de algunas tablas y que tiene privilegios de DBA
Título: Re: quitar privilegios en oracle
Publicado por: 0roch1 en 5 Octubre 2015, 18:15 pm
Estás seguro de que "nombre" es el nuevo usuario creado?, muestra el query por pantalla solo para verificar que es el usuario creado al que intentas aplicar los cambios. query = "EXECUTE immediate 'Revoke create session FROM '||nombre;" MsgBox(query)
Título: Re: quitar privilegios en oracle
Publicado por: d91 en 5 Octubre 2015, 23:39 pm
aqui esta el codigo completo, las variables priv en la aplicacion son checkbox para saber cuales hay que retirar. El nombre del usuario lo tomo de un dropdownlist que esta lleno con los usuarios que estan activos, y vuelvo a recalcar que desde la consola al realizar el for desde un bloque anonimo si funciona CREATE OR REPLACE PROCEDURE usp_quita_priv (nombre varchar2, priv1 NUMBER, priv2 NUMBER, priv3 NUMBER, priv4 NUMBER, proc NUMBER, borrar NUMBER, sesion NUMBER ) IS privilegios varchar2(512); BEGIN IF borrar > 0 THEN EXECUTE immediate 'Drop user '||nombre||' cascade'; elsif sesion > 0 THEN EXECUTE immediate 'Revoke create session FROM '||nombre; END IF; IF priv1 > 0 THEN privilegios:='INSERT'; END IF; IF priv2 > 0 AND privilegios IS NOT NULL THEN privilegios:=privilegios||','||' UPDATE'; END IF; IF priv2 > 0 AND privilegios IS NULL THEN privilegios:='UPDATE'; END IF; IF priv3 > 0 AND privilegios IS NOT NULL THEN privilegios:=privilegios||','||' DELETE'; END IF; IF priv3 > 0 AND privilegios IS NULL THEN privilegios:='DELETE'; END IF; IF priv4 > 0 AND privilegios IS NOT NULL THEN privilegios:=privilegios||','||' SELECT'; END IF; IF priv4> 0 AND privilegios IS NULL THEN privilegios:='SELECT'; END IF; ---------------------------------------- IF privilegios IS NOT NULL THEN FOR x IN (SELECT TABLE_NAME nombre FROM user_tables) LOOP ---dbms_output.put_line(x.nombre); --EXECUTE IMMEDIATE 'GRANT SELECT ON ' || x.table_name || ' TO <<someone>>'; --execute immediate 'GRANT '||privilegios||' on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' to '||usuario_; EXECUTE immediate 'Revoke '||privilegios||' on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' from '||nombre; END LOOP; END IF; IF proc > 0 THEN FOR x IN (SELECT DISTINCT name nombre, TYPE FROM USER_SOURCE WHERE TYPE IN ('PROCEDURE')) LOOP --execute immediate 'GRANT EXECUTE on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' to '||usuario_; EXECUTE immediate 'Revoke execute on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' from '||nombre; END LOOP; END IF; ---borrar > 0 END;
Título: Re: quitar privilegios en oracle
Publicado por: 0roch1 en 6 Octubre 2015, 16:45 pm
Entiendo Es para la única instrucción en donde no te permite hacer el cambio?. Me sigue causando duda la variable nombre, pienso que posiblemente estás tratando de aplicar el query al actual usuario. Puedes imprimirla solo para verificarla. query varchar2(50); .... query := 'Revoke create session FROM '||nombre; dbms_output.put_line(query );
|