2010-07-18 13 views

Respuesta

19

Una columna varbinary puede almacenar cualquier cosa. Para almacenar una cadena en ella, habría que echarlo a varbinary:

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

Pero una contraseña, una columna varbinary por lo general las tiendas de un hash de algún tipo. Por ejemplo, un hash SHA1 utilizando el HashBytes function:

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

Almacenamiento de un hash de una sola vía en lugar de la contraseña real es más seguro. Puede verificar si la contraseña coincide:

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

Pero no hay forma de que pueda recuperar la contraseña mirando la tabla. Entonces, solo el usuario final conoce su contraseña, y ni siquiera el DBA puede recuperarla.

+0

puedo almacenar archivos en bruto como un archivo de audio? – JerryGoyal

+0

@JerryGoyal sí. Otra cosa que se hace comúnmente, es almacenar archivos más grandes en el disco, y simplemente almacenar las rutas de archivos en la DB, aunque – iliketocode

1

Deberá emitir explícitamente el VARCHAR.

SELECT CAST(N'Test' as VARBINARY) 

El mensaje de error del SQL Server dice.

La conversión implícita de tipo de datos varchar a varbinary no es permitida.

1

SQL Server requiere una conversión explícita de varchar to varbinary, como por la gran mesa de CAST y CONVERT en MSDN

La mesa tendrá una columna varbinary para almacenar valores hash según sys.sql_logins

Cuestiones relacionadas