Frage

Leider habe ich Klartext-Passwörter in einer Datenbank. Ich möchte diese Klartext Werte übergeben um so wenig wie möglich für, sagen wir, Vergleiche und Updates. Zu diesem Zweck versuche ich einen Blick auf meine Tabelle Benutzer, dass schließt die Klartext-Passwörter zu erstellen und bietet stattdessen einen Hash-Wert dieses Passwort.

Hier ist meine aktuelle SQL Server-Ansicht, die nicht funktioniert:

SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt
       HashBytes('SHA1', PasswordSalt + u.Password) AS PasswordHash
FROM dbo.Users AS u

Ich würde gerne über Alternativen zu diesem Ansatz zu hören, aber ansonsten scheint das Problem die virtuelle Spalte zu verketten PasswordSalt mit .. nichts. So funktioniert die folgende einfache Ansicht:

SELECT u.Login AS Column1, u.Login + 'b' AS Column2

, aber dies nicht:

SELECT u.Login AS Column1, Column1 + 'b' AS Column2

Der Fehler, den ich von Management Studio bin Empfang ist

  

Ungültige Spaltenname 'Column1'.

Vielen Dank im Voraus für alle Ideen, was ich falsch mache!

War es hilfreich?

Lösung

Das Problem auftritt, weil der FROM-Klausel der Anweisung gibt an, dass die Daten ausgewählt werden, kommt aus der Tabelle Benutzer, aber die SELECT-Teil verweist auf eine Spalte PasswordSalt genannt. SQL Server kann keine Spalte mit diesem Namen auf der Benutzertabelle finden, damit der Fehler.

kann Alternative Ansatz sein, das Salz in einer Unterabfrage zu generieren. Zum Beispiel

SELECT x.PasswordSalt,  HashBytes('SHA1', x.PasswordSalt + x.Password) AS PasswordHash FROM ( SELECT  CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt, Password FROM dbo.Users) x

Andere Tipps

Was ist

SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt 
       HashBytes('SHA1', CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) + u.Password) AS PasswordHash 
FROM dbo.Users AS u 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top