Diferenciar maiúsculas no login e na senha

25/10/2013

0

Para diferenciar maiúsculas no login e na senha montei estes dois códigos, mas nenhum funciona, o que está errado ?

OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario Where Login = '@Login' And Senha = '@Senha' COLLATE Latin1_General_CS_AS", conexao);


OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario Where Login COLLATE Latin1_General_CS_AS = '" + @Login.Trim() +"' And Senha COLLATE Latin1_General_CS_AS = '" + @Senha.Trim() + "', conexao);


Jair Souza

Jair Souza

Responder

Posts

12/11/2013

Joel Rodrigues

Amigo, geralmente o campo login não é case sensitive, ou seja, não diferencia maiúsculas de minúsculas. Isso geralmente é aplicado apenas no campo senha.
Responder

12/11/2013

[desativado] Gonçalves

Isso mesmo Jair. Fica mais fácil assim não é mesmo?
Responder

12/11/2013

Jair Souza

Com certeza, mas para a senha parece importante diferenciar ?
Responder

12/11/2013

Joel Rodrigues

Com certeza, mas para a senha parece importante diferenciar ?
Para a senha é fundamental que seja diferenciado, inclusive alguns sistemas requerem que a senha seja composta por letras maiúsculas e minúsculas (além de caracteres especiais e numéricos, em alguns casos).
Responder

12/11/2013

Jair Souza

...sim, mas como fazer ? Já que COLLATE Latin1_General_CS_AS não dá.
Partindo do que já tenho nesta linha :

OleDbCommand comando = new OleDbCommand("SELECT * FROM Funcionario F " + "INNER JOIN Perfil AS P ON F.Perfil  = P.IDPerfil Where [F.Login] = @Login and [F.Senha] = @Senha and F.Situacao = true", conexao);
Responder

12/11/2013

[desativado] Gonçalves

Jair,

não entendi.

Você deve ter uma tabela de "Funcionario" associada a uma de "Perfil". Este "Perfil" tem um usuário eu uma senha.

Username deve ser chave ou parte dela.
A senha é a senha. Unica e intransferível associada aquele usuário.

Para logar, usuario digitado deve ser igual ao usuário no banco, senha digitada deve ser igual a senha no banco e mais quaisquer outras regras que você decidir.

O que mais falta?
Responder

12/11/2013

Jair Souza

A senha pode ser "a123b" ou "A123B" ou "A123b" ou ...porque não diferencia maiúscula de minúscula.
Me parece que essa senha não é tão senha assim, não é ?
...mas é mais por capricho, que gostaria de que ficasse no rigor da comparação do que foi digitado com o que está banco.
Tipo é no Windows.
Responder

12/11/2013

[desativado] Gonçalves

Então mas é por isso que eu te falei que o melhor seria você guardar o HASH da senha ao invés de a senha em claro. Desta maneira, a senha vai ficar relativamente protegida e não haverá possibilidade de gerar usuários e senhas iguais ...

Veja, se o usuário for parte da chave da tabela, não vão existir dois JOAO. Isto permite que mesmo que exista a senha TESTE para o JOAO e o RONALDO, não vai importar. Um não vai saber da existência do outro.

Não sei se acabei confundindo mais do que explicando ...
Responder

13/11/2013

Jair Souza

Este é o meu primeiro projeto...
Como eu faria o HASH ?
Tenho uma tabela Funcionario com os campos :

IDFuncionario - numeração automatica - chave primaria
Nome
Login
Senha
Perfil
Situacao

E uma tabela Perfil :

IDPerfil - Numeração automatica = chave primária
Nome
Descricao



Responder

13/11/2013

[desativado] Gonçalves

Sugestão:

IDFuncionario - numeração automatica - chave primaria
Nome
Login - chave primaria
Senha
Perfil
Situacao

O resto fica como está.

Para gerar o HASH em JAVA você pode usar o seguinte:

import java.security.MessageDigest;

public class teste {

    public static String ComputeHash(String senha) {
        try {
            MessageDigest mecanismoDeHash = MessageDigest.getInstance("SHA-256");
            byte[] hashEmBytes = mecanismoDeHash.digest(senha.getBytes("UTF-8"));
            StringBuffer hashEmHexadecimal = new StringBuffer();

            for (int i = 0; i < hashEmBytes.length; i++) {
                String hex = Integer.toHexString(0xff & hashEmBytes[i]);
                if (hex.length() == 1) {
                    hashEmHexadecimal.append('0');
                }
                hashEmHexadecimal.append(hex);
            }

            return hashEmHexadecimal.toString();
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }
}


Esse método deve ser usado quando você recebe a senha do usuário e vai gravar ela no banco quando faz o cadastro do usuário e quando recebe a senha no login para comparar com o que foi salvo no banco.
Responder

13/11/2013

[desativado] Gonçalves

Desculpe, esqueci em C#

using System;
using System.Security.Cryptography;
using System.Text;

public class teste {

    static string ComputeHash(string senha) {
        SHA256Managed mecanismoDeHash = new SHA256Managed();
        string hashEmHexadecimal = String.Empty;
        byte[] bytesHash = mecanismoDeHash.ComputeHash(Encoding.UTF8.GetBytes(senha), 0, Encoding.UTF8.GetByteCount(senha));
        foreach(byte b in bytesHash)
        {
            hashEmHexadecimal += b.ToString("x2");
        }
        return hashEmHexadecimal;
    }
}
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar