Могу ли я объединить виртуальный столбец в виду?

StackOverflow https://stackoverflow.com/questions/2375575

  •  24-09-2019
  •  | 
  •  

Вопрос

К сожалению, у меня есть открытые тексты пароли в базе данных. Я хочу пройти эти открытые элементы ценностей как можно меньше, скажем, сравнения и обновления. С этой целью я пытаюсь создать представление о моих пользователей Таблица, которая исключает наложенные пароли и вместо этого предоставляет хешированное значение этого пароля.

Вот мой текущий вид SQL Server, который не работает:

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

Я был бы рад услышать о альтернативах этого подхода, но в противном случае проблема, кажется, объединяет виртуальный столбец Пароль с чем. Например, следующие простые простые произведения:

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

Но это не так:

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

Ошибка, которую я получаю от Studio Management

Неверное имя столбца «Column1».

Заранее спасибо за любые идеи о том, что я делаю не так!

Это было полезно?

Решение

Проблема происходит, потому что из предложения вашего оператора указывает на то, что данные для отображения поставляются из таблицы пользователей, но деталь выбора ссылается на столбец с именем PassiteSalt. SQL Server не может найти столбец с этим именем на таблице пользователей, поэтому ошибка.

Альтернативный подход может быть генерировать соль в подзапросе. Например

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

Другие советы

Что о

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 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top