- Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 2 meses atrás por
joseniz.
-
AutorPosts
-
20 de dezembro de 2008 às 8:46 am #84393
souza
ParticipanteBoa noite pessoal
Rodei a utlpwdmg.sql para alterar o profile default. Sei que a senha do usuário ñ pode ser o nome do usuário , senha com pelo menos 4 caracteres e também sei que precisa um caracter , digito e pontuação e entre outras coisas.
Porém quando vou criar um usuário (apenas exemplo) me apresenta o seguinte erro
create user teste2015
identified by t?Es0;ERRO na linha 2:
ORA-00911: caractere inválidoA verify_function pede um sinal de pontuação , e aí não entendi o porquê do erro – ainda mais que olhando o script abaixo é possível ver que é permitido o uso de ? e outros sinais.
Alguém tem alguma idéia ?
Segue abaixo
Rem
Rem $Header: utlpwdmg.sql 31-aug-2000.11:00:47 nireland Exp $
Rem
Rem utlpwdmg.sql
Rem
Rem Copyright (c) Oracle Corporation 1996, 2000. All Rights Reserved.
Rem
Rem NAME
Rem utlpwdmg.sql – script for Default Password Resource Limits
Rem
Rem DESCRIPTION
Rem This is a script for enabling the password management features
Rem by setting the default password resource limits.
Rem
Rem NOTES
Rem This file contains a function for minimum checking of password
Rem complexity. This is more of a sample function that the customer
Rem can use to develop the function for actual complexity checks that the
Rem customer wants to make on the new password.
Rem
Rem MODIFIED (MM/DD/YY)
Rem nireland 08/31/00 – Improve check for username=password. #1390553
Rem nireland 06/28/00 – Fix null old password test. #1341892
Rem asurpur 04/17/97 – Fix for bug479763
Rem asurpur 12/12/96 – Changing the name of password_verify_function
Rem asurpur 05/30/96 – New script for default password management
Rem asurpur 05/30/96 – Created
Rem— 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/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 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 contains at least one letter, one digit and one -- punctuation mark. -- 1. Check for the digit isdigit:=FALSE; m := length(password); FOR i IN 1..10 LOOP FOR j IN 1..m LOOP IF substr(password,j,1) = substr(digitarray,i,1) THEN isdigit:=TRUE; GOTO findchar; END IF; END LOOP; END LOOP; IF isdigit = FALSE THEN raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); END IF; -- 2. Check for the character <>
ischar:=FALSE;
FOR i IN 1..length(chararray) LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(chararray,i,1) THEN
ischar:=TRUE;
GOTO findpunct;
END IF;
END LOOP;
END LOOP;
IF ischar = FALSE THEN
raise_application_error(-20003, ‘Password should contain at least one
digit, one character and one punctuation’);
END IF;
— 3. Check for the punctuation
<>
ispunct:=FALSE;
FOR i IN 1..length(punctarray) LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(punctarray,i,1) THEN
ispunct:=TRUE;
GOTO endsearch;
END IF;
END LOOP;
END LOOP;
IF ispunct = FALSE THEN
raise_application_error(-20003, ‘Password should contain at least one
digit, one character and one punctuation’);
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; / -- This script alters the default parameters for Password Management -- This means that all the users on the system have Password Management -- enabled and set to the following values unless another profile is -- created with parameter values set to different value or UNLIMITED -- is created and assigned to the user. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/1440 PASSWORD_VERIFY_FUNCTION verify_function;
20 de dezembro de 2008 às 3:36 pm #84394Leonardo Litz
ParticipanteTenta assim:
create user teste2015
identified by “t?Es0”;Vlw Leonardo Litz
24 de dezembro de 2008 às 7:47 am #84435joseniz
ParticipanteA mensagem ORA-00911 é uma restrição do RDBMS, isso ocorre antes de passar pela função de validação de senha contida na profile default.
Note que as únicas mensagens emitidas pela função padrão postada por você são: ORA-20001, ORA-20002, ORA-20003 e ORA-20004.
-
AutorPosts
- Você deve fazer login para responder a este tópico.