Domanda

Purtroppo, non ho password in chiaro in un database. Voglio passare questi valori in chiaro in tutto il meno possibile, per esempio, confronti e aggiornamenti. A tal fine, sto cercando di creare una vista del mio tavolo Gli utenti che esclude la password in chiaro e invece fornisce un valore hash di quella password.

Ecco il mio attuale vista di SQL Server, che non funziona:

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

sarei felice di sentir parlare di alternative a questo approccio, ma per il resto il problema sembra essere concatenando il colonna virtuale PasswordSalt con .. nulla. Per esempio, il seguente vista semplice funziona:

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

ma questo non lo fa:

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

L'errore che sto ricevendo da Management Studio è

  

nome di colonna non valido 'Column1'.

Grazie in anticipo per tutte le idee su quello che sto facendo male!

È stato utile?

Soluzione

Il problema si verifica perché la clausola FROM della sua dichiarazione indica che i dati da selezionare proviene dalla tabella Utenti, ma la parte riferimenti selezionare una colonna di nome PasswordSalt. SQL Server non riesce a trovare una colonna con questo nome sul tavolo Gli utenti, da qui l'errore.

approccio alternativo potrebbe essere quello di generare il sale in una sottoquery. Ad esempio

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

Altri suggerimenti

Che dire

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top