elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  quitar privilegios en oracle
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: quitar privilegios en oracle  (Leído 834 veces)
d91

Desconectado Desconectado

Mensajes: 154


Ver Perfil
quitar privilegios en oracle
« en: 5 Octubre 2015, 04:26 »

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
Código
  1. ORA-01031: insufficient privileges
  2.  
la linea de codigo que ejecuto en el procedimiento almacenado es este
Código
  1. EXECUTE immediate 'Revoke create session FROM '||nombre;
  2.  
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


En línea

0roch1

Desconectado Desconectado

Mensajes: 122



Ver Perfil
Re: quitar privilegios en oracle
« Respuesta #1 en: 5 Octubre 2015, 18:15 »

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.

Código
  1. query = "EXECUTE immediate 'Revoke create session FROM '||nombre;"
  2. MsgBox(query)
  3.  



En línea

d91

Desconectado Desconectado

Mensajes: 154


Ver Perfil
Re: quitar privilegios en oracle
« Respuesta #2 en: 5 Octubre 2015, 23:39 »

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
Código
  1. CREATE OR REPLACE PROCEDURE usp_quita_priv
  2. (nombre varchar2,
  3. priv1 NUMBER,
  4. priv2 NUMBER,
  5. priv3 NUMBER,
  6. priv4 NUMBER,
  7. proc NUMBER,
  8. borrar NUMBER,
  9. sesion NUMBER
  10. )
  11. IS
  12. privilegios varchar2(512);
  13. BEGIN
  14.  IF borrar > 0 THEN
  15.    EXECUTE immediate 'Drop user '||nombre||' cascade';
  16.    elsif sesion > 0 THEN
  17.    EXECUTE immediate 'Revoke create session FROM '||nombre;
  18.    END IF;
  19.  
  20.  
  21.      IF priv1 > 0 THEN
  22.        privilegios:='INSERT';
  23.      END IF;
  24.  
  25.      IF priv2 > 0 AND privilegios IS NOT NULL THEN
  26.          privilegios:=privilegios||','||' UPDATE';
  27.      END IF;
  28.  
  29.      IF priv2 > 0 AND privilegios IS NULL THEN
  30.         privilegios:='UPDATE';
  31.      END IF;
  32.  
  33.      IF priv3 > 0 AND privilegios IS NOT NULL THEN
  34.         privilegios:=privilegios||','||' DELETE';
  35.      END IF;
  36.  
  37.      IF priv3 > 0 AND privilegios IS NULL THEN
  38.         privilegios:='DELETE';
  39.     END IF;
  40.  
  41.      IF priv4 > 0  AND privilegios IS NOT NULL THEN
  42.         privilegios:=privilegios||','||' SELECT';
  43.      END IF;
  44.  
  45.      IF priv4> 0 AND privilegios IS NULL THEN
  46.         privilegios:='SELECT';
  47.      END IF;
  48.  
  49.       ----------------------------------------
  50.  IF privilegios IS NOT NULL THEN
  51.  FOR x IN (SELECT TABLE_NAME nombre FROM user_tables)
  52. LOOP
  53.  ---dbms_output.put_line(x.nombre);
  54.  --EXECUTE IMMEDIATE 'GRANT SELECT ON ' || x.table_name || ' TO <<someone>>';
  55.  --execute immediate 'GRANT '||privilegios||' on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' to '||usuario_;
  56.    EXECUTE immediate 'Revoke '||privilegios||' on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' from '||nombre;
  57. END LOOP;
  58. END IF;
  59.  
  60.  IF proc > 0 THEN
  61.  FOR x IN (SELECT DISTINCT name nombre, TYPE FROM USER_SOURCE WHERE TYPE IN ('PROCEDURE'))
  62. LOOP
  63.  --execute immediate 'GRANT EXECUTE  on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' to '||usuario_;
  64.  EXECUTE immediate  'Revoke execute on '||'"'||user||'"'||'.'||'"'||x.nombre||'"'||' from '||nombre;
  65. END LOOP;
  66.  
  67.  END IF;
  68.  
  69.  ---borrar > 0
  70. END;
  71.  
  72.  
  73.  
En línea

0roch1

Desconectado Desconectado

Mensajes: 122



Ver Perfil
Re: quitar privilegios en oracle
« Respuesta #3 en: 6 Octubre 2015, 16:45 »

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.

Código
  1. query varchar2(50);
  2.  
  3. ....
  4.  
  5. query := 'Revoke create session FROM '||nombre;
  6.  
  7. dbms_output.put_line(query );
  8.  
  9.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Quitar elemento del menu agregar quitar programas sin desinstalarlo
Windows
paco_enr 2 1,913 Último mensaje 17 Marzo 2005, 20:28
por paco_enr
aparecer boton de quitar en agregar o quitar programas
Windows
nonex 2 1,197 Último mensaje 29 Mayo 2006, 21:20
por JuszR
Oracle presenta Oracle Database 11g
Noticias
Isirius 0 683 Último mensaje 16 Julio 2007, 12:14
por Isirius
Escalada de privilegios en Oracle Database 11g
Bugs y Exploits
YaTaMaS 0 1,759 Último mensaje 15 Noviembre 2007, 19:23
por YaTaMaS
[ORACLE-JAVA] java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Java
abrtx 2 4,788 Último mensaje 21 Junio 2011, 15:35
por abrtx
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines