Могу ли я объединить виртуальный столбец в виду?
-
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