- Este tópico contém 10 respostas, 4 vozes e foi atualizado pela última vez 17 anos atrás por
Regis Araujo.
-
AutorPosts
-
13 de março de 2009 às 6:57 pm #85780
Regis Araujo
ParticipanteSalve Galera do Bem…!!!!! (plagio do Pedro Bial)
Tenho uma dúvida (Claro neh.. se to postando é pq tenho dúvida.. q burro eu sou.. da zero para mim…heheh 😀 ).
Tem como criar uma regra de segurança na criação de senhas para usuários dentro do oracle…
Ex…
Com tamanho de no mínimo 15 caracteres, que terão que conter números, letras, caracteres especiais e não poderão conter determinadas palavras e ou datas?
Caraca.. assim eu irei definir tipo.. uma senha do usuário como abaixo, senhas simples não seriam aceitas…
Password: P@r@nGaR1c0_T1r1m1Rr@R0_Aro
Isto é mais para conhecimento proprio… pois aqui na empresa são usadas senhas muito.. mas muito fracas.. e caso precisem mudar e criar regras.. eu já saiba…
😈
Mas é claro que eu vou testar aqui mesmo né.. hehehehe.. !!!
😈13 de março de 2009 às 7:11 pm #85782Ishii
ParticipanteOlá Thunder,
Na criação dos Profiles há uma opção no password PASSWORD_VERIFY_FUNCTION que você pode passar uma função que você mesmo criou para isso… Então crie um função com estas regras de qtd de caracteres, tipos dos caracteres, combinação de datas etc. O que você quiser… ai no user associa este profile….
[]s Ishii
13 de março de 2009 às 7:18 pm #85783Regis Araujo
ParticipanteOpa.. valeu Ishi…
Pesquisei por PASSWORD_VERIFY_FUNCTION e encontrei um post do Alphamek sobre como utilizar esta função…
Muito obrigadoooooo!!!
Abraços…
13 de março de 2009 às 9:32 pm #85785David Siqueira
ParticipanteEra isso que eu ia dizer Thunder o Rodrigão tem , inclusive eu trabalho com ele, estavamos usando ela ainda pouco para criar uma padronização em uma de nossas bases de dados aqui.
Ele pode te falar melhor caso tenha dúvidas sobre isso.Abração!!!
David13 de março de 2009 às 10:52 pm #85787Regis Araujo
ParticipanteFala David…
Legal.. e foi na ideia que ele passou.. que eu bolei um script aqui rapido..
Da uma olhada e ve se ta bom… por favor….
create or replace function VALIDASENHA(Senha Varchar2) return BOOLEAN isResult BOOLEAN := TRUE;
isNumericA BOOLEAN := TRUE;
isNumericB BOOLEAN := TRUE;
isNumericC BOOLEAN := TRUE;
isCharactersA BOOLEAN := TRUE;
isCharactersB BOOLEAN := TRUE;
isCharactersC BOOLEAN := TRUE;
isSpecialCharA BOOLEAN := TRUE;
isSpecialCharB BOOLEAN := TRUE;
isSpecialCharC BOOLEAN := TRUE;
isAchouNumeric BOOLEAN := FALSE;
isAchouChar BOOLEAN := FALSE;
isAchouSpecialChar BOOLEAN := FALSE;
tamanho NUMBER;
BEGINtamanho := length(Senha);
/*
SOMENTE PERMITE SENHAS COM NO MÍNIMO 10 CARACTERES...
*/
IF tamanho < 10 THEN
Result := FALSE;
ELSEFOR i IN 1..tamanho-2 LOOP
/*
Esta validação somente irá permitir que seja digitado 2 números por vez..
Ex:
PassWord : A11B22C33
Alimentando variáveis com as informações obtidas com as verificações do campo da senha...
Identifica se os valores da senha são do Números.
*/
isNumericA := substr(Senha,i, 1) IN ('0','1','2','3','4','5','6','7','8','9');
isNumericB := substr(Senha,i+1,1) IN ('0','1','2','3','4','5','6','7','8','9');
isNumericC := substr(Senha,i+2,1) IN ('0','1','2','3','4','5','6','7','8','9');/*
Esta validação somente irá permitir que seja digitado 2 letras por vez..
Ex:
PassWord : AA11BB22CC33
Alimentando variáveis com as informações obtidas com as verificações do campo da senha...
Identifica se os valores da senha são Letras (Maiusculas/Minusculas).
*/isCharactersA := substr(Senha,i, 1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','z','w','y',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Z','W','Y');
isCharactersB := substr(Senha,i+1,1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','z','w','y',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Z','W','Y');
isCharactersC := substr(Senha,i+2,1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','z','w','y',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Z','W','Y');
/*
Esta validação somente irá permitir que seja digitado 2 Caracteres Especiais por vez..
Ex:
PassWord : AA11+.BB-*22/=CC?@33
Alimentando variáveis com as informações obtidas com as verificações do campo da senha...
Identifica se os valores da senha são do tipo CARACTER ESPECIAL.
*/isSpecialCharA := substr(Senha,i, 1) IN (' ','ç','Ç','!','@','#','$','%','^','&','.','{','}','*','(',')','_','/','','|','/','',',',';',':','-','+','=','?','~','"','[',']','|','' || chr(39));
isSpecialCharB := substr(Senha,i+1,1) IN (' ','ç','Ç','!','@','#','$','%','^','&','.','{','}','*','(',')','_','/','','|','/','',',',';',':','-','+','=','?','~','"','[',']','|','' || chr(39));
isSpecialCharC := substr(Senha,i+2,1) IN (' ','ç','Ç','!','@','#','$','%','^','&','.','{','}','*','(',')','_','/','','|','/','',',',';',':','-','+','=','?','~','"','[',']','|','' || chr(39));IF isNumericA AND isNumericB AND isNumericC THEN
Result := FALSE;
END IF;IF isCharactersA AND isCharactersB AND isCharactersC THEN
Result := FALSE;
END IF;IF isSpecialCharA AND isSpecialCharB AND isSpecialCharC THEN
Result := FALSE;
END IF;END LOOP;
FOR i IN 1..tamanho LOOP
/*
Esta validação somente irá verificar se existe pelo menos 1 caracter de cada tipo, pois é obrigatório a digitação de
pelo menos 1 (UM) caracter de cada tipo..
Ex:
PassWord : AA11+.BB-*22/=CC?@33
Alimentando variáveis com as informações obtidas com as verificações do campo da senha...
Identifica se os valores da senha são do tipo NUMEROS, LETRAS (Maiusculas/Minusculas) e CARACTERES ESPECIAIS.
*/isNumericA := substr(Senha,i, 1) IN ('0','1','2','3','4','5','6','7','8','9');
isCharactersA := substr(Senha,i, 1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','z','w','y',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Z','W','Y');
isSpecialCharA := substr(Senha,i, 1) IN (' ','ç','Ç','!','@','#','$','%','^','&','.','{','}','*','(',')','_','/','','|','/','',',',';',':','-','+','=','?','~','"','[',']','|','' || chr(39));IF isNumericA THEN
isAchouNumeric := TRUE;
END IF;IF isCharactersA THEN
isAchouChar := TRUE;
END IF;IF isSpecialCharA THEN
isAchouSpecialChar := TRUE;
END IF;END LOOP;
IF NOT (isAchouNumeric AND isAchouChar AND isAchouSpecialChar) THEN
Result := FALSE;
END IF;END IF;
RETURN(Result);
END VALIDASENHA;
Caraca… não achei q fosse ficar tão grande aqui no Post… hauhua.. hauah..!!
Agora tenho algumas duvidas…
Esta correto como eu alimento a funcão?? Ou a function deve ser criada de outra maneira?!?!!?Eu devo criar esta FUNCTION/PROCEDURE com o usuário SYS ou SYSTEM ou com qualquer usuário que tenha a permissão de SYSDBA ???
Assim.. eu rodo o comando abaixo…
SQL> CREATE PROFILE REGIS_TESTE_PROFILE LIMIT
FAILED_LOGIN_ATTEMPTS 5/1440
PASSWORD_VERIFY_FUNCTION REGIS.VALIDASENHA;SQL> CREATE USER REGIS IDENTIFIED BY REGIS EXPIRE
DEFAULT TABLESPACE TBSESTUDOSDAT
TEMPORARY TABLESPACE TBSESTUDOSTEMP
PROFILE REGIS_TESTE_PROFILE;Correto???? Assim eu obrigo ao usuário quando logar ter que digitar uma nova senha correto???
Abraços…!!!
13 de março de 2009 às 11:39 pm #85788David Siqueira
ParticipanteOpa!!..essa função deve ser criada com o SYS, ele fara a verificação das metricas para alteração de senhas e quando o usuário tiver que pasar seu login ele deve obedecer os parametros que você pre-estabeleceu, sugiro que você crie um documento orientando seus usuários quanto a padronização, assim você evita que fiquem te ligando e querendo saber como deve ser a senha deles, ou até mesmo pedindo pra que você crie para eles.
Abcs.
David
14 de março de 2009 às 12:02 am #85789Regis Araujo
ParticipanteFala Vieri…
Bom.. quando fui criar a FUNCTION… apresentou o erro abaixo…
ORA-28004 invalid argument for function specified in PASSWORD_VERIFY_FUNCTION VALIDASENHA
Aparentemente o tipo VARCHAR2 que estou usando para receber a senha não é aceito…
Como devo criar a função?? como deve ser o TYPE do parametro que recebe a senha??
Abraços…
14 de março de 2009 às 4:44 am #85790Regis Araujo
Participante((Antes de tudo perdão David… acabei lhe chamando de Vieri no post anterior…. ))
Fala David… Fala Ishii…!!!
Bom, já achei o erro… eu estava apenas passando o parametro de SENHA, precisava passar o parametro de usuário, senha e senha antiga(Ainda não aprendi como utilizar o de senha antiga, creio que é para comparar a senha atual com a antiga)…
Corrigi a FUNCTION e realizei os testes.. ficou show de bola…
Valeu amigos… muito obrigado pela ajuda…
Para ajudar o pessoal que queira aprender sobre como fazer isto… eu postei no meu blog como fazer esta validação…
Espero que ajude alguem como me ajudou…
Ahh.. David…
Nem vou mandar e-mail para o pessoal da empresa, pois eu fiz esta validação mais para meu aprendizado, infelizmente lá eu não estou mais mexendo com banco de dados.. algo q ADORO…
Bom.. vou passar isto para o DBA da empresa.. quando falei a ele q estava fazendo isto, ele ficou muito interessado, pois as regras de senhas lá não existem…. hehehehehe…
Da uma olhada no BLOG… e deixa um comentario se gostou ou não…
https://profissionaloracle.com.br/blogs/ … os-oracle/
Abraçossssssssssssssssssssssss!!!!
15 de março de 2009 às 1:53 am #85791David Siqueira
ParticipanteGrande Regis ou Thunder..hehehe…sem erro percebi que tu trocou o nome mais nem esquenta meu brother, bem só posso dizer parabéns pra ti , uma pela iniciativa de padronizar as senhas e estabelecer uma segurança mesmo que seja a nivel de teste, e conte com a gente pra qualquer coisa meu velho.
Abração!!!
David.15 de março de 2009 às 7:29 am #85793Rodrigo Almeida
ParticipanteRegis,
Salve a sua função com o usuário SYS e depois, veja os profiles que existem no banco de dados, que esteja com o parâmetro PASSWORD_VERIFY_FUNCTION.
Existem alguns artigos na internet que podem lhe ajudar:
http://imasters.uol.com.br/artigo/3310/ … _parte_01/
http://imasters.uol.com.br/artigo/3384/ … _parte_02/
Abraços,
Rodrigo Almeida
16 de março de 2009 às 4:57 pm #85810Regis Araujo
ParticipanteFala Rodrigo!
Opa.. fiz isto mesmo e eu já conhecia estes seus posts no Imaster, foi de lá que eu tirei minhas dúvidas sobre perfil e usuários…!
Valeu pelas dicas..!
Agora estou estudando seu post de RMAN e vou começar a fazer testes.. Mas isto é assunto para outro post meu aqui no forum..!!
Abraços..!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.