none
Procedure Interna Validação Login senha RRS feed

  • Pergunta

  • Salve galera!

    Estou procurando a horas na net uma procedure interna do SQL Server (não setou falando de select em uma tabela de usuário e senha criada previamente) para validar usuário e senha.

    No meu caso eu já estou conectado no Banco de Dados e gostaria de verificar se um usuário e senha são válidos...

    Alguém sabe se existe algo assim?

    Valeu ...

    quinta-feira, 2 de agosto de 2012 18:47

Respostas

  • Obrigado a todos que ajudaram!

    Achei como resolver. Estava me atrapalhando com os tipos de variáveis. Deixei montado o esquema como a seguir:

    Solução:

    Create Function dbo.fn_Criptografa(@texto varchar(max))returns varchar(max) As 
    Begin
    declare @criptografado varbinary(max);

      set @criptografado = HASHBYTES('SHA1',@texto);
      return cast('' as xml).value('xs:hexBinary(sql:variable("@criptografado") )', 'varchar(max)');
    End;

    Create Function dbo.fn_ComparaCriptografado(@sTexto varchar(max), @sCriptografado varchar(max))returns integer As
    Begin
    declare @iRetorno integer,
            @bTeste varbinary(max),
            @sTeste varchar(max);
            
      set @bTeste = HASHBYTES('SHA1', @sTexto);
      set @sTeste = cast('' as xml).value('xs:hexBinary(sql:variable("@bTeste") )', 'varchar(max)');

      if @sTeste = @sCriptografado
        set @iRetorno = 1
      else
        set @iRetorno = 0;
      
      return(@iRetorno);
    End;

    Abraço

    • Marcado como Resposta BuenoBox sexta-feira, 3 de agosto de 2012 14:06
    sexta-feira, 3 de agosto de 2012 14:06

Todas as Respostas

  • Bueno...

    Explique melhor.

    O que você pretende com essa stored procedure ?


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    quinta-feira, 2 de agosto de 2012 19:12
  • Obrigado pelo retorno Roberson,

    Preciso montar uma rotina dentro do sistema para validar o usuário/senha depois de estar logado.

    Porém eu não tenho tabela de usuários e senhas. Eu crio os users/login/senhas etc diretamente no Sql Server. Assim sendo, eu não consigo validar um usuário e senha passado como parâmetros através de um select. Os usuários até consigo, mas as senhas sabe Deus como são armazenadas...

    Exemplo:

    1- Logo como "sa";

    2-Verifico se o usuário "joao" com senha "123456" está cadastrado...

    3- Se estiver cadastrado, retorno verdadeiro na minha rotina do sistema.

    Caso precise de mais detalhe pode falar!
    O interesse é todo meu! rss

    obrigado

    quinta-feira, 2 de agosto de 2012 19:44
  • Boa Noite,

    Acredito que o link abaixo seja de seu interesse:

    Criptografia básica em SQL Server - Utilizando as funções pwdEncrypt e pwdCompare
    http://www.devmedia.com.br/criptografia-basica-em-sql-server-utilizando-as-funcoes-pwdencrypt-e-pwdcompare/3932

    Se você já tem os usuários e senhas cadastrados no SQL Server, seria melhor utilizá-los. Outra implementação seria que você criasse sua própria tabela de usuários e senhas. Isso lhe daria mais independência, pois, você não dependeria do Engine.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    sexta-feira, 3 de agosto de 2012 01:06
  • Olá Gustavo,

    Obrigado pela ajuda, ótimo artigo para criptografia. Dei uma pesquisa e vi que talvez seja descontinuado as funções pwdencrypt e pwdcompare nas versões atuais do SQL Server.

    Assim sendo, resolvi usar a função HASHBYTES('SHA1', 'senha').

    Porém, não estou conseguindo comparar as strings cryptografadas nas rotinas que criei. Estou fazendo algo errado mas não consigo achar onde ...

    Se alguém puder analisar fico grato:

    Grato...

     

    Create Function dbo.fn_Criptografa(@texto varchar(4000))returns varchar(4000)
    As Begin
    declare @criptografado varchar(4000);

      set @criptografado = convert(varchar(4000), HASHBYTES('SHA1',@texto));
      return(@criptografado);
    End;/*select dbo.fn_Criptografa('1234') --vai retornar 'qí¤Ðž*¥ä£°¥r¬ , '*/


    Create Function dbo.fn_ComparaCriptografado(@sTexto varchar(4000), @sCriptografado varchar(4000))returns integer
    As Begin
    declare @iRetorno integer,
            @sTeste varchar(4000);
            
      set @sTeste = convert(varchar(4000),HASHBYTES('SHA1', @sTexto));
      if @sTeste = @sCriptografado
        set @iRetorno = 1
      else
        set @iRetorno = 0;
      
      return(@iRetorno);
    End;

    /*select dbo.fn_ComparaCriptografado('1234','qí¤Ðž*¥ä£°¥r¬ , ')

    --Está retornando "0". deveria retornar 1

    */

    sexta-feira, 3 de agosto de 2012 13:24
  • Obrigado a todos que ajudaram!

    Achei como resolver. Estava me atrapalhando com os tipos de variáveis. Deixei montado o esquema como a seguir:

    Solução:

    Create Function dbo.fn_Criptografa(@texto varchar(max))returns varchar(max) As 
    Begin
    declare @criptografado varbinary(max);

      set @criptografado = HASHBYTES('SHA1',@texto);
      return cast('' as xml).value('xs:hexBinary(sql:variable("@criptografado") )', 'varchar(max)');
    End;

    Create Function dbo.fn_ComparaCriptografado(@sTexto varchar(max), @sCriptografado varchar(max))returns integer As
    Begin
    declare @iRetorno integer,
            @bTeste varbinary(max),
            @sTeste varchar(max);
            
      set @bTeste = HASHBYTES('SHA1', @sTexto);
      set @sTeste = cast('' as xml).value('xs:hexBinary(sql:variable("@bTeste") )', 'varchar(max)');

      if @sTeste = @sCriptografado
        set @iRetorno = 1
      else
        set @iRetorno = 0;
      
      return(@iRetorno);
    End;

    Abraço

    • Marcado como Resposta BuenoBox sexta-feira, 3 de agosto de 2012 14:06
    sexta-feira, 3 de agosto de 2012 14:06