rozróżnienie dużych liter w MSSQL

0

Witam

mam panel logowania do aplikacji, gdzie user podając login prawidłowy ale dużymi literami lub <ort>abstrachując </ort>na przemian dużymi i małymi, zapytanie SQL przepuszcza, bo w MSSQL Server 2000 wystarczy że podamy w predykacie WHERE podamy prawidłowy ciąg znaków.

SELECT Login,Psd
From LOGUJ
WHERE Login = 'aaa' //'AAA' tak ma byc zle, a przepuszcza

0

Na przykładzie MySQL
Sposob1. W MySql zmieniasz w komórce metode porównywania napisów na -> utf8_bin . przynajmniej ja tak robiłem, lecz jak widać głupi sposób,
Sposob 2
BINARY

SELECT Login,Psd
From LOGUJ
WHERE BINARY Login = 'aaa'   //'AAA'  tak ma byc zle, a przepuszcza
0

BINARY znam, ale to nie działa w MSSQL Server 2000

0

Zmień reguły porównań dla tego pola na collate SQL_Polish_Cp1250_CS_AS

Całość ma wyglądać:

select Login,Psd from LOGUJ where Login = 'aaa' collate SQL_Polish_Cp1250_CS_AS
0

o kurcze, to musiałbym zmienić wszystkie tabele w bazie danych, a jak to zrobic na konkretnej tabeli ?

P.S.
w bazie mam kodowanie Polish_CI_AS

0

Przykład przeze mnie podany zmienia reguły dla tego konkretnego zapytania. Można również zmienić dla konkretnego pola w tabeli na stałe albo dla całej bazy, więcej w google...

0

a gdybys mial taka strukture (defakto bezpieczniejsza)

tabela users a w niej pola user varachar i pass varchar. Oba pola mialy by wartosci wyliczone przez MD5
i tak np Twoj user aaa nie bylby zapisany w bazie jako aaa tylko jako MD5(aaa).

Przy porownywaniu w bazie zrobilbys tylko

SELECT pass FROM users WHERE user = 'sjkdancjwe...itd'

Pozniej robisz MD5 z tego co user wpisal w pole pass w okienku logowania i porownujesz z tym co dostales z bazy.
Jak dostaniesz 0 rekordow to komunikat 'sorry ludku ale takiego usera nie ma w bazie'

1 użytkowników online, w tym zalogowanych: 0, gości: 1