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

pl/sql - strip de caracteres en password

Estas en el tema de pl/sql - strip de caracteres en password en el foro de Oracle en Foros del Web. Hola gente, les cuento mi duda: Tengo una conexion de una db oracle 10g con un idm. Con el idm creo usuarios a traves de ...
  #1 (permalink)  
Antiguo 27/06/2012, 14:37
 
Fecha de Ingreso: octubre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Exclamación pl/sql - strip de caracteres en password

Hola gente, les cuento mi duda:

Tengo una conexion de una db oracle 10g con un idm. Con el idm creo usuarios a traves de eDirectory y se los envio a la DB. La cosa es que algunos de esos usuarios llegan con passwords de mas de 8 caracteres y lo que necesito es que la DB haga un truncado de esas pass y las deje de 8 caracteres.

Estuve probando con utlpwdmg.sql - script for Default Password Resource Limits

y dentro de ese script hay una parte que dice:

Código:
 -- Check for the maximum length of the password
   IF length(password) > 8 THEN
	  	
      --raise_application_error(-20002, 'Password length more than 8');
   END IF;
La cuestion es ver como editar para que cumpla mi condicion.

Alguna idea?

Gracias!

Última edición por danyesu; 27/06/2012 a las 14:55 Razón: hacer ams completo el post
  #2 (permalink)  
Antiguo 27/06/2012, 18:08
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: pl/sql - strip de caracteres en password

Hola danyesu

Y luego esa no es la condición que necesitas?
No entiendo bien que es lo que requieres.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 28/06/2012, 10:16
 
Fecha de Ingreso: octubre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: pl/sql - strip de caracteres en password

Esa condicion lo que hace es tirarme un error en la db si el usuario tiene una contraseña con mas de 8 caracteres (sacandole el comentario a la linea de raise _application...)

Lo que necesito es armar dentro de esa condicion para que si le llega una pass con mas de 8 caracteres, lo deje pasar al usuario pero con la pass truncada.

Ej:

usuario: pepe
pass: 123456789

Lo que busco es que el usuario se cree, pero con la pass: 12345678, es decir, la trunca.
  #4 (permalink)  
Antiguo 28/06/2012, 10:38
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: pl/sql - strip de caracteres en password

Código SQL:
Ver original
  1. -- Check for the maximum length of the password
  2.    IF LENGTH(password) > 8 THEN
  3.        
  4.       password := SUBSTR(password,1,8);
  5.    END IF;

Adi lo puedes hacer.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 28/06/2012, 10:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: pl/sql - strip de caracteres en password

Repetido!!!!
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 28/06/2012, 10:48
 
Fecha de Ingreso: octubre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: pl/sql - strip de caracteres en password

Hola huesos,

cuando reemplzao por el codigo que mandaste la db me sale con este error:

ORA-28004: Argumento no valido para la funcion password_verify_function

Alguna idea de como arreglarlo?

Gracias!
  #7 (permalink)  
Antiguo 28/06/2012, 10:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: pl/sql - strip de caracteres en password

Debe ser problema del script como tal.

La función substr lo que hace es tomar desde la posición 1 hasta la 8 lo que trae la cadena password.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 28/06/2012, 11:54
 
Fecha de Ingreso: octubre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: pl/sql - strip de caracteres en password

Que raro... este es el script que estoy corriendo:

Código:
- This script sets the default password resource parameters
-- This script needs to be run to enable the password features.
-- However the default resource parameters can be changed based 
-- on the need.
-- A default password complexity function is also provided.
-- This function makes the minimum complexity checks like
-- the minimum length of the password, password not same as the
-- username, etc. The user may enhance this function according to
-- the need.
-- This function must be created in SYS schema.
-- connect sys/<password> as sysdba before running the script

CREATE OR REPLACE FUNCTION verify_function
(username varchar2,
  password varchar2,
  old_password varchar2)
  RETURN boolean IS 
   n boolean;
   m integer;
   differ integer;
   isdigit boolean;
   ischar  boolean;
   ispunct boolean;
   digitarray varchar2(20);
   punctarray varchar2(25);
   chararray varchar2(52);

BEGIN 
   digitarray:= '0123456789';
   chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
   punctarray:='.!"#$%&()``*+,-/:;<=>?_';

   -- Check if the password is same as the username
   IF NLS_LOWER(password) = NLS_LOWER(username) THEN
     raise_application_error(-20001, 'Password same as or similar to user');
   END IF;

   -- Check for the minimum length of the password
   IF length(password) < 4 THEN
      raise_application_error(-20002, 'Password length less than 4');
   END IF;
   
   -- Check for the maximum length of the password
   IF length(password) > 8 THEN
	  	password := SUBSTR(password,1,8);
      --raise_application_error(-20002, 'Password length more than 8');
   END IF;

   -- Check if the password is too simple. A dictionary of words may be
   -- maintained and a check may be made so as not to allow the words
   -- that are too simple for the password.
   IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd') THEN
      raise_application_error(-20002, 'Password too simple');
   END IF;

  
   -- Check if the password differs from the previous password by at least
   -- 3 letters
   IF old_password IS NOT NULL THEN
     differ := length(old_password) - length(password);

     IF abs(differ) < 3 THEN
       IF length(password) < length(old_password) THEN
         m := length(password);
       ELSE
         m := length(old_password);
       END IF;

       differ := abs(differ);
       FOR i IN 1..m LOOP
         IF substr(password,i,1) != substr(old_password,i,1) THEN
           differ := differ + 1;
         END IF;
       END LOOP;

       IF differ < 3 THEN
         raise_application_error(-20004, 'Password should differ by at \
         least 3 characters');
       END IF;
     END IF;
   END IF;
   -- Everything is fine; return TRUE ;   
   RETURN(TRUE);
END;
Con ese codigo agregado password := SUBSTR(password,1,8); me tira error de compilacion, pero sin ese codigo funciona bien (pero sin cumplir la condicion que necesito claro..)
  #9 (permalink)  
Antiguo 28/06/2012, 13:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: pl/sql - strip de caracteres en password

Esa es una función de verificación.
Si te fijas, la variable password es un parametro de entrada.

Por que es necesario que hagas uso de este script?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 28/06/2012, 14:20
 
Fecha de Ingreso: octubre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: pl/sql - strip de caracteres en password

Porque la base de datos a la que se le va aplicar el desarrollo final solo admite como max 8 caracteres en la password, y los usuarios que vienen de otros sistemas, pueden o no tener passwords con una mayor cantidad.

Hay alguna forma de arreglarlo a ese script para llegar a ese funcionamiento?

Etiquetas: caracteres, password, sql
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




La zona horaria es GMT -6. Ahora son las 17:39.