私は、ビュー内の仮想列を連結することはできますか?
-
24-09-2019 - |
質問
残念ながら、私は、データベース内の平文パスワードを持っています。私は、たとえば、比較および更新のためできるだけ周りにこれらの平文値を渡したいです。この目的を達成するために、私はその除外平文パスワード私Usersテーブルのビューを作成しようと、代わりにそのパスワードのハッシュされた値を提供しています。
ここでは動作しません。私の現在の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
が、この1つはしません。
SELECT u.Login AS Column1, Column1 + 'b' AS Column2
私は、Management Studioから受けていますエラーが
であります無効な列名 '列1' ます。
私が間違ってやっていることについて任意のアイデアを事前に感謝!
解決
あなたの文のFROM句PasswordSaltという名前の列をユーザーテーブルから来たデータを選択することを示しているが、SELECTパーツ参照ので、
問題が発生しています。 SQL Serverの故にユーザーテーブルの上にこの名前を持つ列、エラーを見つけることができません。
別のアプローチは、サブクエリで塩を生成することができます。たとえば、
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
他のヒント
どの程度
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
所属していません StackOverflow