Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Restringir numero de conexiones a un usuario en ORACLE 11

Estas en el tema de Restringir numero de conexiones a un usuario en ORACLE 11 en el foro de Oracle en Foros del Web. Hola gente, Bueno mi consulta es la siguiente. Tengo definido en los parametros del sistema de Oracle el numero de sesiones y numero de procesos ...
  #1 (permalink)  
Antiguo 21/10/2009, 05:57
 
Fecha de Ingreso: agosto-2006
Mensajes: 174
Antigüedad: 17 años, 8 meses
Puntos: 2
Restringir numero de conexiones a un usuario en ORACLE 11

Hola gente,

Bueno mi consulta es la siguiente. Tengo definido en los parametros del sistema de Oracle el numero de sesiones y numero de procesos a una determinada cantidad. Lo que me interesaria es el poder restringir a, por ejemplos, 2 o 3 conexiones a un determinado usuario creado, y que no pueda acceder mas de esas veces al Toad, a sql plus y cualquier otro tipo de gestor de bbdd.

Se que Oracle 11g tiene esta opcion, pero no logor averiguarla.

Espero vuestras respuestas.

Muchas gracias!
  #2 (permalink)  
Antiguo 21/10/2009, 07:34
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Restringir numero de conexiones a un usuario en ORACLE 11

Umm deberia crearte un profile ejm.



CREATE PROFILE perfil_usuario LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_LIFE_TIME 30
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_GRACE_TIME 0;

y puedes agregarles estos

SESSIONS_PER_USER 1
CPU_PER_SESSION 10000
IDLE_TIME 60
CONNECT_TIME 480;



No se si se puede colocar la cantidad de logueos (Esto serviria si son invalidos lo logueos FAILED_LOGIN_ATTEMPTS) , el limite que te podria servir serian SESSIONS_PER_USER que es la cantidad de sesiones por usuario y PASSWORD_LIFE_TIME que se mide en dias, desde el primer logueo del usuario se cuentan los dias y se bloquea despues de ese tiempo. No le das tiempo de gracia y el tiempo para que pueda reusar su password sea infinito.


Alteras el usuario y en vez de ponerle profile default le pones el que creaste

ALTER USER usuario PROFILE resource_profile;


creo que estos son los limites que le puedes colocar a un profile


PASSWORD_LIFE_TIME
Tiempo de vida en días del password

PASSWORD_GRACE_TIME
Periodo de gracia en días para cambiar el password una vez expirado el mismo. Empieza a partir del primer intento de logeo una vez expirado el password

FAILED_LOGIN_ATTEMPS
Número de intentos fallido de acceso antes del bloqueo de la cuenta

PASSWORD_LOCK_TIME
Número de días en que la cuenta esta bloqueada después del numero especificado de intentos fallidos.

PASSWORD_REUSE_TIME
Numero de días que deben pasar antes de que un password pueda ser reusado

PASSWORD_REUSE_MAX
Numero de veces que un password puede ser reusado

CPU_PER_SESSION
Total de tiempo de CPU medido en centésimas de segundos

SESSIONS_PER_USER
Numero de sesiones permitidas para un usuario

CONNECT_TIME
Tiempo transcurrido de conexión medido en minutos

IDLE_TIME
Periodos de tiempo de inactividad medido en minutos

LOGICAL_READS_PER_SESSION
Numero de data blocks (lecturas físicas y lógicas)

PRIVATE_SGA
Espacio privado en la SGA medido en bytes (Para Shared Server solamente)

CPU_PER_CALL
Tiempo de CPU por llamada en centésimas de segundos

LOGICAL_READS_PER_CALL
Numero de Data Blocks que pueden ser leídos por llamada
  #3 (permalink)  
Antiguo 26/10/2009, 16:58
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Restringir numero de conexiones a un usuario en ORACLE 11

Puedes utilizar un trigger on_logon, se que por aqui es la cosa, mas no se decirte como funciona exactamente, pero este es el camino.


Una url de referencia:

http://www.orafaq.com/maillist/oracl...09/22/0288.htm
  #4 (permalink)  
Antiguo 04/03/2010, 14:17
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Restringir numero de conexiones a un usuario en ORACLE 11

Ok despues de varia vueltas que dio el mundo me toco la situacion y aqui esta:

Código:
/*********************************************************************/
/* Purpose: Evitar que un usuario inicie sesion mas de X veces       */
/*********************************************************************/
/* Author: Octavio Suárez                                            */
/*                                                                   */
/* Description: El trigger evita mas de un logeo por parte de un     */
/* usuario distinto de SYS, ver vista V$session para colocar N       */
/* cantidad de variantes como el si es un proceso background,        */
/* esquema etc.                                                      */ 
/*                                                                   */
/*********************************************************************/

CREATE OR REPLACE TRIGGER logon_trigger
AFTER LOGON ON DATABASE

DECLARE

cont               NUMBER; 

BEGIN

      SELECT COUNT(DISTINCT(s.PROCESS))
      INTO cont 
      FROM V$session s 
      WHERE username=USER 
      AND username<>'SYS';

      IF (cont > 1) THEN
      RAISE_APPLICATION_ERROR(-20021,'El usuario no puede tener dos sesiones concurrentes');

      END IF;

END;
Con este trigger evitamos que un usuario distinto de SYS se pueda loguer mas de una vez.

Saludos.
  #5 (permalink)  
Antiguo 19/03/2010, 14:29
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Restringir numero de conexiones a un usuario en ORACLE 11

Hola a todos,

Completando un poco mas este hilo voy a aclarar lo siguiente


1) Para los usuarios con GRANT DBA el trigger los deja loguearse y la validación no les afectas, yo coloque:

Código:
AND username<>'SYS';
por ende no es necesario.

He buscado las razones, y he visto que es un misterio (O al menos asi lo describen en muchos foros en ingles). Ni siquiera matando la sesion se lograria que un DBA no se loguee por medio de el trigger on longon. Lo he probado y si quieren pueden hacerlo ustedes.

Una cosa que deberia matar cualquier session no lo hace.

Código:
EXECUTE IMMEDIATE 'ALTER SYSTEM DISCONNECT SESSION ''sid,serial#'' IMMEDIATE;';
ó

Código:
EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || '''');
En este caso tendrian que buscar el numero el sid y el serial en la V$session para la ultima sesion que seria la que esta en curso.

Conclusión: Los usuarios grant dba se pasan por un lado los triggers onlogon , a pesar de que si se dispare y pueda aunque sea insertar su sesion.

Claro esta, a nadie le vamos a dar un grant dba pero no esta demas saber esto.


Saludos y espero que les sirva todo este experimento que hice.
  #6 (permalink)  
Antiguo 20/03/2010, 16:49
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Restringir numero de conexiones a un usuario en ORACLE 11

Mmmmmmmmmmmmmmmmmmm.

Buena informacion compañero.

Me lo apunto a ver si tengo un rato el Lunes y lo investigo. Curiosito porque yo he calzado sesiones a usuarios DBA, pero nunca en un ON LOGON
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:44.