MS SQL SERVER 2005の手順でログインするためのユーザー名とパスワードを確認しています.SQL Server 2005では大文字ではなく小文字のパスワードを入力しても大文字と小文字が区別されないため、 、システムはログインすることができます。MS SQL Server 2005 - 大文字と小文字を区別しないパスワードの問題
私は何をすべきですか?同じことを確認できるSQL Server 2005のコマンドはありますか?
MS SQL SERVER 2005の手順でログインするためのユーザー名とパスワードを確認しています.SQL Server 2005では大文字ではなく小文字のパスワードを入力しても大文字と小文字が区別されないため、 、システムはログインすることができます。MS SQL Server 2005 - 大文字と小文字を区別しないパスワードの問題
私は何をすべきですか?同じことを確認できるSQL Server 2005のコマンドはありますか?
SQL Server 2005は、大文字と小文字を区別しない比較を使用する既定の照合によってのみ使用されます。パスワードは平文で保存しないでください。合理的に安全なハッシングアルゴリズムを使用してそれらをハッシュし、ハッシュを格納する必要があります。 (おそらく実際には塩の値を使うべきですが、ハッシュから始めましょう)。
大文字と小文字を区別する照合を使用します。
...where Password = @password COLLATE SQL_Latin1_General_CP1_CS_AS
はい、実際にはデータベースにプレーンテキストのパスワードを保存しないでください。
平文のパスワードを保存しないでください。パスワードのハッシュを保存して比較してください。 HashBytes()関数を使用できます。
クリアテキストのパスワードを保存して、他の人のアドバイスを繰り返さないようにすることもできますが、通常は音がします。
照合を設定するだけでなく、あなたもそうのようにvarbinary型のトリックを使用することができます。
WHERE
CAST(Password as varbinary(20)) = CAST(@Password as varbinary(20)) AND
CAST(Username as varbinary(20)) = CAST(@Username as varbinary(20))
以上も大文字と小文字を区別した検索になります - ちょうどフィールドと同じにvarbinary型の長さを設定することを忘れないでください長さ
インデックス・スキャンを避けるために、あなたにも大文字小文字を区別しない検索を含めることができます - それはインデックスが追求し、その後varbinaryの検索を実行するでしょう:
WHERE
Password = @Password AND
Username = @Username AND
CAST(Password as varbinary(20)) = CAST(@Password as varbinary(20)) AND
CAST(Username as varbinary(20)) = CAST(@Username as varbinary(20))
パスワードをクリアテキストとして保存することが有効な例を挙げることができますか?パスワードを知ってもらうための有効な例がないので、決して使用しないシステムにする必要があります。 –
たとえば、レガシーシステムとの相互運用性。私が言っていることは、それをハッシュする代わりにクリアテキストを保存する理由があるかもしれないということです - そして、OPが尋ねていることに対して直接の解決策を提示することなく、同じアドバイスを述べる10の回答の理由は本当にありません。 –
とHTTPごとなどを://security.stackexchange .com/q/963/485、MD5を使用しないでください。 –
@Rory - md5を提案することはありません - HashBytes()はいくつかのshaバリアントをサポートしています。しかし、これは今でもまだ古いです。これはbcryptをサポートしていないので、bcryptを使用していない場合は間違っています。 –
ええ、それは古いものです。この回答は2009年4月ではなく、4月10日からのものだと思いました。すべての方法でbcrypt :-) –