Pular para o conteúdo
  • Este tópico contém 10 respostas, 4 vozes e foi atualizado pela última vez 17 anos atrás por Avatar photoRegis Araujo.
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #85780
    Avatar photoRegis Araujo
    Participante

      Salve 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.. !!!
      😈

      #85782
      Ishii
      Participante

        Olá 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

        #85783
        Avatar photoRegis Araujo
        Participante

          Opa.. valeu Ishi…

          Pesquisei por PASSWORD_VERIFY_FUNCTION e encontrei um post do Alphamek sobre como utilizar esta função…

          Muito obrigadoooooo!!!

          Abraços…

          #85785
          David Siqueira
          Participante

            Era 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!!!
            David

            #85787
            Avatar photoRegis Araujo
            Participante

              Fala 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 is

              Result 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;
              BEGIN

              tamanho := length(Senha);

              /*
              SOMENTE PERMITE SENHAS COM NO MÍNIMO 10 CARACTERES...
              */
              IF tamanho < 10 THEN
              Result := FALSE;
              ELSE

              FOR 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…!!!

              #85788
              David Siqueira
              Participante

                Opa!!..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

                #85789
                Avatar photoRegis Araujo
                Participante

                  Fala 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…

                  #85790
                  Avatar photoRegis 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!!!!

                    #85791
                    David Siqueira
                    Participante

                      Grande 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.

                      #85793
                      Rodrigo Almeida
                      Participante

                        Regis,

                        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

                        #85810
                        Avatar photoRegis Araujo
                        Participante

                          Fala 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..!!

                        Visualizando 11 posts - 1 até 11 (de 11 do total)
                        • Você deve fazer login para responder a este tópico.