web-dev-qa-db-ja.com

SQL Serverのvarbinaryデータ型に格納できるデータは何ですか?

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

18
Fraz Sundal

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

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

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

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

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

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

しかし、表を見てパスワードを取得する方法はありません。したがって、エンドユーザーだけが自分のパスワードを知っており、DBAでさえもそれを取得することはできません。

25
Andomar

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

SELECT CAST(N'Test' as VARBINARY)

SQL Serverのエラーメッセージは言う。

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

1
Chris Diver

SQL Serverは、MSDNのCASTおよびCONVERTの大きなテーブルに従って、 varcharからvarbinary への明示的な変換を必要とします

テーブルには、ハッシュ値を格納するvarbinary列があります sys.sql_logins

1
gbn
SELECT CAST(N'Test' as VARBINARY)

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

SELECT CAST(N'Test' as VARBINARY(30))
0
Loay Oraby