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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 3,027 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
quitar privilegios en oracle
« 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
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: 123



Ver Perfil
Re: quitar privilegios en oracle
« Respuesta #1 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.

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



En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: quitar privilegios en oracle
« Respuesta #2 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
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: 123



Ver Perfil
Re: quitar privilegios en oracle
« Respuesta #3 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.

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
¿Como quitar contraseña de bios? Quitar seguridad BIOS.
Seguridad
santiagoogle 2 9,063 Último mensaje 16 Febrero 2011, 16:00 pm
por santiagoogle
[ORACLE-JAVA] java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Java
abrtx 2 6,944 Último mensaje 21 Junio 2011, 15:35 pm
por abrtx
como quitar privilegios a las apps en android
Dispositivos Móviles (PDA's, Smartphones, Tablets)
buite 4 3,358 Último mensaje 29 Enero 2018, 14:07 pm
por buite
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines