2010-06-14 12 views

Respuesta

7

Depende de su intercalación, que parece no distingue entre mayúsculas y minúsculas. Por ejemplo, la intercalación estándar es Latin1_General_CI_AS, donde CI significa insensible a mayúsculas y minúsculas. Puede forzar una collaction diferente para una comparación diferente:

select * 
from users 
where name = @name 
and  pass COLLATE Latin1_General_CS_AS = @pass COLLATE Latin1_General_CS_AS 

Por cierto, que no se debe almacenar contraseñas en su base de datos - que debería estar salazón y hash ellos.

+1

Aún así, cuando se comparan las contraseñas hash, la comparación debe ser sensible a mayúsculas y minúsculas. :) – Guffa

+3

Sí de hecho binario! –

+0

pulgar hacia arriba, pero sí se requiere sensibilidad de caso en hash también –

1

Es necesario utilizar una intercalación entre mayúsculas y minúsculas para la comparación:

SELECT * FROM users 
WHERE name = @name, pass = @pass 
COLLATE SQL_Latin1_General_Cp1_CS_AS 

Ver this artículo para más detalles.

1

Todo tiene que ver con la recopilación de bases de datos.

Esto debería ayudar a:

select * from users where name = @name, pass = @pass COLLATE SQL_Latin1_General_CP1_CS_AS 

hay alguna información con respecto here las intercalaciones de SQL Server

1

Para mayúsculas y minúsculas, debe especificar la colación en su consulta. Algo así como:

select * from users where name = @name, pass = @pass COLLATE SQL_Latin1_General_Cp1_CS_AS 
3

Como muchos otros ya han publicado las intercalaciones puede utilizar en su consulta o cambiar la intercalación de la columna "pase" para estar entre mayúsculas y minúsculas. También puede cambiar la consulta para utilizar el tipo VARBINARY en lugar de cambiar la colación:

SELECT * FROM users 
WHERE name = @name 
AND pass = @pass 
AND CAST(pass AS VARBINARY(50)) = CAST(@pass AS VARBINARY(50)) 

nota que me dejó en la cláusula pass = @pass. Dejar esta línea en la consulta permite que SQL Server use cualquier índice en la columna de aprobación.

1

Usa un colación binaria para asegurarte una coincidencia exacta.

WHERE pass = @pass COLLATE Latin1_General_BIN 
Cuestiones relacionadas