2

残念ながら、データベースに平文のパスワードがあります。たとえば、比較や更新のために、これらのプレーンテキスト値をできるだけ少なく渡したいと考えています。この目的のために、プレーンテキストのパスワードを除外し、代わりにそのパスワードのハッシュ値を提供するユーザー テーブルのビューを作成しようとしています。

動作しない私の現在の SQL Server ビューは次のとおりです。

SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt
       HashBytes('SHA1', PasswordSalt + u.Password) AS PasswordHash
FROM dbo.Users AS u

このアプローチの代替案について聞いてうれしいですが、それ以外の場合、問題は仮想列PasswordSaltを連結しているようです. たとえば、次の単純なビューが機能します。

SELECT u.Login AS Column1, u.Login + 'b' AS Column2

しかし、これはしません:

SELECT u.Login AS Column1, Column1 + 'b' AS Column2

Management Studio から受け取ったエラーは

列名 'Column1' が無効です。

私が間違っていることについてのアイデアを事前にありがとう!

4

2 に答える 2

1

この問題は、ステートメントのFROM句が、選択されるデータがUsersテーブルからのものであることを示しているが、SELECT部分​​がPasswordSaltという名前の列を参照しているために発生しています。SQL Serverは、Usersテーブルでこの名前の列を見つけることができないため、エラーが発生します。

別のアプローチは、サブクエリでSaltを生成することです。例えば

SELECT x.PasswordSalt,  HashBytes('SHA1', x.PasswordSalt + x.Password) AS PasswordHash FROM ( SELECT  CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt, Password FROM dbo.Users) x

于 2010-03-03T22:58:21.473 に答える
1

どうですか

SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt 
       HashBytes('SHA1', CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) + u.Password) AS PasswordHash 
FROM dbo.Users AS u 
于 2010-03-03T23:17:55.223 に答える