sql - tipo - varbinary que almacena
¿Qué datos se pueden almacenar en el tipo de datos varbinary de SQL Server? (4)
Tengo una tabla en la que el campo userpassword tiene el tipo de datos varbinary, por lo que estoy confundido en que forma debo guardar los datos en el campo userpassword porque cuando guardo los datos varchar me dio un error.
SQL Server requiere una conversión explícita de varchar a varbinary , según la tabla grande en CAST y CONVERT en MSDN
La tabla tendrá una columna varbinary para almacenar valores hash según sys.sql_logins
Tendrá que lanzar explícitamente el VARCHAR.
SELECT CAST(N''Test'' as VARBINARY)
El mensaje de error de SQL Server dice.
La conversión implícita del tipo de datos varchar a varbinary no está permitida.
Una columna varbinary
puede almacenar cualquier cosa. Para almacenar una cadena en ella, deberías convertirla en varbinary
:
declare @t table (id int identity, pwd varbinary(50))
insert into @t (pwd) values (cast(''secret'' as varbinary(50)))
Pero para una contraseña, una columna varbinary
generalmente almacena un hash de algún tipo. Por ejemplo, un hash SHA1 usando la función HashBytes
:
insert into @t (pwd) values (HashBytes(''sha1'', ''secret''));
Almacenar un hash de una sola vía en lugar de la contraseña real es más seguro. Puede comprobar si la contraseña coincide:
select * from @t where pwd = HashBytes(''sha1'', ''secret'')
Pero no hay forma de recuperar la contraseña mirando la tabla. Así que solo el usuario final conoce su contraseña, y ni siquiera el DBA puede recuperarla.
SELECT CAST(N''Test'' as VARBINARY)
------ tienes que darle un tamaño ---------->
SELECT CAST(N''Test'' as VARBINARY(30))