Как я могу программно проверить пароль в более новых версиях MySQL?

#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 посмотрите это обновление ответов и эти комментарии.