#mysql #authentication #passwords
#mysql #аутентификация #пароли
Вопрос:
В более новых версиях MySQL есть подключаемая система аутентификации. Ранее существовала функция PASSWORD, которая могла генерировать хэш, найденный в user.authentication_string
, но эта функция была удалена в более поздних версиях (8.0.11 AFAICT) MySQL.
Если я хотел бы проверить пароль пользователя (без фактического входа в систему — поскольку пользователь может не иметь возможности войти в систему с хоста, на котором я нахожусь), есть ли способ сделать это, используя современный MySQL?
Комментарии:
1. я предполагаю, что ваш сервер MySQL 8 работает на
mysql_native_password
?2. Это может быть, но не обязательно. Если есть независимый от плагинов способ сделать это, это было бы здорово. Если нет, я могу ограничить это использование
mysql_native_password
3. Проверьте мой ответ, думаю, это помогло бы.
Ответ №1:
Если я хотел бы проверить пароль пользователя (без фактического входа в систему — поскольку пользователь может не иметь возможности войти в систему с хоста, на котором я нахожусь), есть ли способ сделать это, используя современный MySQL?
PASSWORD(..)
функциональные швы должны быть такими же, как при использовании этого SQL CONCAT('*', UPPER(SHA1(UNHEX(SHA1(..)))))
Я не знаю, для чего вы используете пароль, но вы не должны использовать его для своих паролей для вашего приложения.
Примечание
PASSWORD()
используется системой аутентификации на сервере MySQL; вы не должны использовать его в своих собственных приложениях. Для этой цели рассмотрите более безопасный метод
Запрос
SELECT
PASSWORD('password')
, CONCAT('*', UPPER(SHA1(UNHEX(SHA1('password')))))
, PASSWORD('password') = CONCAT('*', UPPER(SHA1(UNHEX(SHA1('password')))));
Результат
| PASSWORD('password') | CONCAT('*', UPPER(SHA1(UNHEX(SHA1('password'))))) | PASSWORD('password') = CONCAT('*', UPPER(SHA1(UNHEX(SHA1('password'))))) |
| ----------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------ |
| *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | 1 |
смотрите демо
Лучший тестовый шов для его подтверждения.
Запрос
SELECT
HEX(number_generator.number) AS 'password'
, PASSWORD(HEX(number_generator.number))
# notice that HEX(number_generator.number) below is the "password" here
, CONCAT('*', UPPER(SHA1(UNHEX(SHA1( HEX(number_generator.number) )))))
, PASSWORD(HEX(number_generator.number)) = CONCAT('*', UPPER(SHA1(UNHEX(SHA1( HEX(number_generator.number) )))))
FROM (
SELECT
@row := @row 1 AS number
FROM (
SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) row1
CROSS JOIN (
SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) row2
CROSS JOIN (
SELECT @row := 0
) init_user_params
) AS number_generator
Результаты
| password | PASSWORD(HEX(number_generator.number)) | CONCAT('*', UPPER(SHA1(UNHEX(SHA1( HEX(number_generator.number) ))))) | PASSWORD(HEX(number_generator.number)) = CONCAT('*', UPPER(SHA1(UNHEX(SHA1( HEX(number_generator.number) ))))) |
| -------- | ----------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| 1 | *E6CC90B878B948C35E92B003C792C46C58C4AF40 | *E6CC90B878B948C35E92B003C792C46C58C4AF40 | 1 |
| 2 | *12033B78389744F3F39AC4CE4CCFCAD6960D8EA0 | *12033B78389744F3F39AC4CE4CCFCAD6960D8EA0 | 1 |
| 3 | *C4E74DDDC9CC9E2FDCDB7F63B127FB638831262E | *C4E74DDDC9CC9E2FDCDB7F63B127FB638831262E | 1 |
| 4 | *908BE2B7EB7D7567F7FF98716850F59BA69AA9DB | *908BE2B7EB7D7567F7FF98716850F59BA69AA9DB | 1 |
| 5 | *7534F9EAEE5B69A586D1E9C1ACE3E3F9F6FCC446 | *7534F9EAEE5B69A586D1E9C1ACE3E3F9F6FCC446 | 1 |
| 6 | *C3AB9ECDF746570BBF9DCAA9DB3586D25956DC93 | *C3AB9ECDF746570BBF9DCAA9DB3586D25956DC93 | 1 |
| 7 | *23E7A7428138939FBE2F69D23E5B87383EFD83C9 | *23E7A7428138939FBE2F69D23E5B87383EFD83C9 | 1 |
| 8 | *6AF37A8C78E3A957D16D98F12788D1CFB2987A4C | *6AF37A8C78E3A957D16D98F12788D1CFB2987A4C | 1 |
| 9 | *7E9FDC7F61153649AB9A75CED26807DF74F86E65 | *7E9FDC7F61153649AB9A75CED26807DF74F86E65 | 1 |
| A | *26307F6B5CDB40C15C247B96C131CC1E0B3FFD1B | *26307F6B5CDB40C15C247B96C131CC1E0B3FFD1B | 1 |
| B | *693EFD3BD44CCBA9924731C2DB18ADB8825C0B0A | *693EFD3BD44CCBA9924731C2DB18ADB8825C0B0A | 1 |
| C | *8B1F657800F87E02617CD07126FDCF7B9F13E955 | *8B1F657800F87E02617CD07126FDCF7B9F13E955 | 1 |
| D | *3F7A80713CAA5954D376F883C83B8E4FEFEAF72C | *3F7A80713CAA5954D376F883C83B8E4FEFEAF72C | 1 |
| E | *1355D7A5CA049A2A7FA92669438A10C77D4FB706 | *1355D7A5CA049A2A7FA92669438A10C77D4FB706 | 1 |
| F | *2201A8B92856ABC4CDA3731B6D3AC61EEC87916C | *2201A8B92856ABC4CDA3731B6D3AC61EEC87916C | 1 |
...
... |
... |
| 53 | *30E6AFC81FB2DB79651D461029189713DDD2D847 | *30E6AFC81FB2DB79651D461029189713DDD2D847 | 1 |
| 54 | *A28085F893F86EA1E692F52D847EA3B203C448E1 | *A28085F893F86EA1E692F52D847EA3B203C448E1 | 1 |
| 55 | *4C951E13CC5E761093F241590580096A2276ECAC | *4C951E13CC5E761093F241590580096A2276ECAC | 1 |
| 56 | *060C8650684D90D54F2D537D0B8513C74F1AE4DD | *060C8650684D90D54F2D537D0B8513C74F1AE4DD | 1 |
| 57 | *F22C0306C4BB97CAE897F4BA7A3D22870725E51D | *F22C0306C4BB97CAE897F4BA7A3D22870725E51D | 1 |
| 58 | *C96B8933A9A02563E00980C026C3401B1E3FB6A2 | *C96B8933A9A02563E00980C026C3401B1E3FB6A2 | 1 |
| 59 | *42AC75307953D669FDEBD5928227A0A991AABFB0 | *42AC75307953D669FDEBD5928227A0A991AABFB0 | 1 |
| 5A | *A43D92E9EC11516AC82C4561124A08E91DE4F208 | *A43D92E9EC11516AC82C4561124A08E91DE4F208 | 1 |
| 5B | *0A89BF1EEF0EDB061EE4F72477E498E5C3233909 | *0A89BF1EEF0EDB061EE4F72477E498E5C3233909 | 1 |
| 5C | *78B1EECD64E0949B20E747230E30538898833DC1 | *78B1EECD64E0949B20E747230E30538898833DC1 | 1 |
| 5D | *C536CE7F28C05D5BBB5E776A92D9DCFF515A6955 | *C536CE7F28C05D5BBB5E776A92D9DCFF515A6955 | 1 |
| 5E | *5C1BA2FD08D6FC2724860A81B70B44CC14912E95 | *5C1BA2FD08D6FC2724860A81B70B44CC14912E95 | 1 |
| 5F | *7031DDE5CFC93067F81FBD30445112136AB32E53 | *7031DDE5CFC93067F81FBD30445112136AB32E53 | 1 |
| 60 | *0B30A071BE5EFE9C738FC899EFF47F90202C533D | *0B30A071BE5EFE9C738FC899EFF47F90202C533D | 1 |
| 61 | *DCDBF922065A133AE5985C3AA7465179DF4C8086 | *DCDBF922065A133AE5985C3AA7465179DF4C8086 | 1 |
| 62 | *0B3DF0C237D6FD5EA8D743889B33384299F8059F | *0B3DF0C237D6FD5EA8D743889B33384299F8059F | 1 |
| 63 | *2A3522DE0C5E510153DA977554999B35C2CA0B56 | *2A3522DE0C5E510153DA977554999B35C2CA0B56 | 1 |
| 64 | *61EB3D64954A1F12CD41EA35F2EB27A0E785E997 | *61EB3D64954A1F12CD41EA35F2EB27A0E785E997 | 1
смотрите демо
Комментарии:
1. Функция Password() никогда не предназначалась для хранения паролей пользователей, пожалуйста, перейдите по ссылке и прочитайте поля «Примечание». Кроме того, он будет полностью удален в будущих версиях. Для хранения паролей нужна функция хэширования паролей с коэффициентом стоимости, таким как BCrypt, SCrypt, PBKDF2 или Argon2.
2. «для хранения паролей нужна функция хэширования паролей с коэффициентом стоимости, таким как BCrypt, SCrypt, PBKDF2 или Argon2». @martinstoeckli я знаю, что понятия не имею, где topicstarter использует это, поскольку также нет тега программирования на стороне сервера, поэтому вы должны поместить свой комментарий под его вопросом, а не под этим ответом, или вы должны, по крайней мере, использовать ping, чтобы перенаправить свой комментарий к нему, я, по крайней мере, добавил предупреждение в ответ сейчас.
3. @WayneWerner посмотрите это обновление ответов и эти комментарии.