Ho una tabella in cui il campo userpassword ha un tipo di dati varbinary, quindi sono confuso che in quale forma dovrei salvare i dati nel campo userpassword perché quando salvi i dati varchar mi ha dato un errore.Quali dati possono essere memorizzati nel tipo di dati varbinary di SQL Server?
risposta
Una colonna varbinary
può memorizzare qualsiasi cosa. Per memorizzare una stringa in esso, dovresti gettarlo ai varbinary
:
declare @t table (id int identity, pwd varbinary(50))
insert into @t (pwd) values (cast('secret' as varbinary(50)))
Ma per una password, una colonna varbinary
solitamente memorizza un hash di qualche tipo. Ad esempio, un hash SHA1 utilizzando il HashBytes
function:
insert into @t (pwd) values (HashBytes('sha1', 'secret'));
archiviare un hash a senso unico al posto della password reale è più sicura. È possibile verificare se la password corrisponde:
select * from @t where pwd = HashBytes('sha1', 'secret')
Ma non è possibile recuperare la password guardando la tabella. Quindi solo l'utente finale conosce la sua password e nemmeno il DBA può recuperarla.
È necessario eseguire il cast esplicito di VARCHAR.
SELECT CAST(N'Test' as VARBINARY)
Messaggio di errore del server SQL.
La conversione implicita dal tipo di dati varchar a varbinary non è consentita .
SQL Server richiede una conversione esplicita da varchar to varbinary, come per il grande tavolo sul CAST e CONVERT in MSDN
La tabella avrà una colonna varbinary per memorizzare i valori hash come da sys.sql_logins
posso memorizzare file raw come un file audio? – JerryGoyal
@JerryGoyal sì. Un'altra cosa che si fa comunemente, è quella di archiviare file di grandi dimensioni su disco, ma solo archiviare i percorsi dei file nel DB – iliketocode