Sajid227 Ответов: 1

Как получить запись в SQL с помощью следующего варианта использования


У меня есть вариант использования, в котором я должен получить последние пять паролей из таблицы passwordhistory, и там два столбца один md5 зашифрован, а второй-хэш, после извлечения пяти записей я должен сравнить эти столбцы с новым паролем, после перемещения их из md5 и хэш-функции, если какая-либо запись найдена, то вернуть true, иначе вернуть false.

Что я уже пробовал:

DECLARE @UserID INT = 6 
DECLARE @Password NVARCHAR(200)='admin1952'


SELECT  *
FROM    ( SELECT TOP 5
                    ChangedPassword AS ChangedPassword ,
                    PasswordChangeHistory.Password_Hash AS Password_Hash
          FROM      PasswordChangeHistory WITH ( NOLOCK )
                    INNER JOIN [User] U WITH ( NOLOCK ) ON PasswordChangeHistory.UserID = U.Id
          WHERE     PasswordChangeHistory.UserID = @UserID
        )  AS result       
WHERE   PasswordChangeHistory.ChangedPassword = dbo.Encrypt_MD5(@Password)
        OR PasswordChangeHistory.Password_Hash = dbo.Encrypt_SHA2(@Password)

Maciej Los

А проблема вот в чем...

vivvicks

можно ли вставить сюда данные обеих таблиц?

kosmas kafataridis

Если я правильно вас понял вам нужно заказать свой подзапрос по дате desc и если у вас есть две функции это нормально иначе я бы зашифровал пароль на моей программе а затем использовал его примерно так

Объявить @UserID INT = 6
Объявить @Password_md5 NVARCHAR(200)= 'xyz'
Объявите @Password_sha2 NVARCHAR(200)= 'zyx'


Выберите случай, когда count (*)=0, затем 0 else 1 end isoldpass
ИЗ (ВЫБЕРИТЕ ТОП-5
ChangedPassword как ChangedPassword ,
PasswordChangeHistory.Функция password_hash как функцию password_hash
Из PasswordChangeHistory с ( NOLOCK )
INNER JOIN [User] U WITH (NOLOCK) ON PasswordChangeHistory.Идентификатор = Идентификатор У.
Где PasswordChangeHistory.UserID = @UserID order by somedate desc
) В результате
Где PasswordChangeHistory.ChangedPassword = @Password_md5
Или PasswordChangeHistory.Функция Password_hash = @Password_sha2
или
Объявить @UserID INT = 6
DECLARE @Password NVARCHAR(200)= 'admin1952'


Выберите случай, когда count (*)=0, затем 0 else 1 end isoldpass
ИЗ (ВЫБЕРИТЕ ТОП-5
ChangedPassword как ChangedPassword ,
PasswordChangeHistory.Функция password_hash как функцию password_hash
Из PasswordChangeHistory с ( NOLOCK )
INNER JOIN [User] U WITH (NOLOCK) ON PasswordChangeHistory.Идентификатор = Идентификатор У.
Где PasswordChangeHistory.UserID = @UserID order by somedate desc
) В результате
Где PasswordChangeHistory.ChangedPassword = dbo.Encrypt_MD5(@Пароль)
Или PasswordChangeHistory.Password_Hash = dbo.Encrypt_SHA2(@Пароль)

Richard Deeming

"в MD5 зашифрованном виде"

Нет.

MD5-это НЕ алгоритм шифрования. Это криптографический хэш-алгоритм. И не очень хороший - ни одна новая разработка не должна его использовать.

MD5-Википедия[^]

1 Ответов

Рейтинг:
10

Sajid227

Вот решение проблемы. как я уже объяснял ранее, мне нужно пять записей из таблицы, а затем проверить новый пароль с существующими пятью записями, чтобы, если этот новый пароль совпадает с предыдущим, вернуть false, иначе вернуть true.

DECLARE @UserID INT = 6 
DECLARE @Password NVARCHAR(200)= 'admin1958'
SELECT * FROM  
( SELECT    TOP(5)    ChangedPassword AS Changed ,PasswordChangeHistory.Password_Hash AS Password_Hash
                    
          FROM      PasswordChangeHistory WITH ( NOLOCK )
                    INNER JOIN [User] U WITH ( NOLOCK ) ON PasswordChangeHistory.UserID = U.Id
          WHERE     PasswordChangeHistory.UserID = @UserID
          ORDER BY  PasswordChangeHistory.ID DESC

) AS result

WHERE result.Changed= dbo.Encrypt_MD5(@Password) or result.Password_Hash = dbo.Encrypt_SHA2(@Password)