Ich habe eine Tabelle, in der das userpassword Feld varbinary Datentyp hat, also bin ich verwirrt, in welcher Form ich die Daten in userpassword Feld speichern sollte, weil, wenn ich varchar Daten speichere, gab es mir Fehler.Welche Daten können im varbinary-Datentyp von SQL Server gespeichert werden?
Antwort
Eine varbinary
Spalte kann alles speichern. So speichern Sie eine Zeichenfolge in es, würden Sie es varbinary
werfen müssen:
declare @t table (id int identity, pwd varbinary(50))
insert into @t (pwd) values (cast('secret' as varbinary(50)))
Aber für ein Passwort, eine varbinary
Spalte speichert in der Regel einen Hash irgendeiner Art. Zum Beispiel mit einem SHA1-Hash der HashBytes
function:
insert into @t (pwd) values (HashBytes('sha1', 'secret'));
Speichern eines Einweg-Hash anstelle des echten Passwort sicherer ist. Sie können überprüfen, ob das Passwort übereinstimmt:
select * from @t where pwd = HashBytes('sha1', 'secret')
Aber es gibt keine Möglichkeit, das Passwort durch einen Blick auf die Tabelle abrufen können. So kennt nur der Endbenutzer sein Passwort und nicht einmal der DBA kann es abrufen.
Sie müssen VARCHAR explizit umwandeln.
SQL Server-Fehlermeldung sagt.
Implizite Konvertierung vom Datentyp varchar in varbinary ist nicht zulässig zulässig.
SQL Server erfordert eine explizite Umwandlung von varchar to varbinary, gemäß dem großen Tisch auf CAST und CONVERT in MSDN
Die Tabelle eine varbinary-Spalte als Hash-Werte speichern pro sys.sql_logins
kann ich speichern Rohdateien wie eine Audiodatei? – JerryGoyal
@JerryGoyal ja. Eine andere Sache, die üblicherweise gemacht wird, ist es, größere Dateien auf der Festplatte zu speichern und nur die Dateipfade in der DB zu speichern – iliketocode