Вы должны хешировать пароли в своем приложении, прежде чем отправлять их в SQL.
Почему я так говорю? Ведь вы могли бы сделать это:
INSERT INTO Accounts (user, salt, password)
VALUES ('myuser', '1234', SHA2(CONCAT('xyzzy', '1234'), 256))
Но теперь вы видите пароль xyzzy в виде простого текста в журналах запросов и двоичных журналах, даже если он хранится в хешированной форме в самой таблице. Если вы не защитите свои журналы должным образом, хакер может получить их и найти пароль каждого.
Вместо этого выполните операцию хеширования в коде приложения. Получите результат и сохраните дословно хеш-строку в базе данных.
INSERT INTO Accounts (user, salt, password)
VALUES ('myuser', '1234', 'd3822b5f03ad0c1a363d874238f6b48fd68a131cc35d5e55c77a81db1d266b84')
Таким образом, простой текстовый пароль не регистрируется.
Аналогичным образом, когда вы проверяете пароль для пользователей при входе в систему, читайте соль, затем используйте ее для хеширования введенного ими пароля, а затем сравнивайте его со строкой хеша, хранящейся в базе данных.
SELECT salt FROM Accounts WHERE user = ?
...calculate hash string using user input + salt...
SELECT password = ? AS password_matches FROM Accounts WHERE user = ?