22

userpassword フィールドに varbinary データ型があるテーブルがあるため、varchar データを保存するとエラーが発生するため、どの形式でデータを userpassword フィールドに保存する必要があるか混乱しています。

4

4 に答える 4

27

列にvarbinaryは何でも格納できます。文字列を格納するには、次のようにキャストする必要がありますvarbinary

declare @t table (id int identity, pwd varbinary(50))
insert into @t (pwd) values (cast('secret' as varbinary(50)))

ただし、パスワードの場合、varbinary通常、列には何らかのハッシュが格納されます。たとえば、次のHashBytes関数を使用した SHA1 ハッシュ:

insert into @t (pwd) values (HashBytes('sha1', 'secret'));

実際のパスワードの代わりに一方向ハッシュを保存すると、より安全になります。パスワードが一致するかどうかを確認できます。

select * from @t where pwd = HashBytes('sha1', 'secret')

ただし、テーブルを見てパスワードを取得する方法はありません。そのため、自分のパスワードを知っているのはエンド ユーザーだけであり、DBA でさえパスワードを取得することはできません。

于 2010-07-18T12:53:52.940 に答える
1

VARCHAR を明示的にキャストする必要があります。

SELECT CAST(N'Test' as VARBINARY)

SQL Server のエラー メッセージには、次のように書かれています。

データ型 varchar から varbinary への暗黙的な変換は許可されていません。

于 2010-07-18T12:55:14.877 に答える
1

SQL Server では、MSDN の CAST および CONVERT に関するビッグ テーブルに従って、varchar から varbinaryへの明示的な変換が必要です。

テーブルには、sys.sql_logins に従ってハッシュ値を格納するための varbinary 列があります。

于 2010-07-18T12:55:58.963 に答える
0
SELECT CAST(N'Test' as VARBINARY)

------サイズを指定する必要があります ---------->

SELECT CAST(N'Test' as VARBINARY(30))
于 2019-01-19T00:27:23.250 に答える