Zmiana wtyczki uwierzytelniania użytkownika w MySQL na „sha256_password”:

ALTER USER 'user'@'N.N.N.N' IDENTIFIED WITH 'sha256_password' BY 'password';

test.php:

#!/usr/bin/env php
<?php
$my = new mysqli('M.M.M.M', 'user', 'password');
echo "OK\n";
$my->close();
?>

Nie działa z „sha256_password”:

php test.php
Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'user'@'hostname' (using password: YES) in /home/user/test.php on line 3

Zmiana wtyczki uwierzytelniania użytkownika z powrotem na „mysql_native_password”:

ALTER USER 'user'@'N.N.N.N' IDENTIFIED WITH 'mysql_native_password' BY 'password';

Po zmianie wtyczki uwierzytelniającej z powrotem na „mysql_native_password” połączenie działa:

php test.php
OK

Wersje oprogramowania:

php --version
PHP 7.2.25-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Nov 28 2019 07:41:59) ( NTS )

dpkg -l | grep libmysqlclient20
ii  libmysqlclient20:amd64                5.7.28-0ubuntu0.16.04.2

mysqld -V
mysqld  Ver 5.7.26-29-57 for debian-linux-gnu on x86_64 (Percona XtraDB Cluster (GPL), Release rel29, Revision 03540a3, WSREP version 31.37, wsrep_31.37)

Jakieś pomysły, jak to naprawić?

Aktualizacja :

Sprawdziłem również, czy działa ze złączem Python MySQLdb:

import MySQLdb
con = MySQLdb.connect(host='127.0.0.1',user='user', passwd='password')
cur = con.cursor()
cur.execute('select 1')
print(cur.fetchall())
con.close()
2
Selivanov Pavel 20 grudzień 2019, 00:00
1
Nie jestem pewien odpowiedzi, ale problem wydaje się być taki sam, jak stackoverflow.com/questions/54177511/… (mysqli należy poinstruować aby użyć sha_256.)
 – 
user3783243
20 grudzień 2019, 00:06
Czy wiesz, jak poinstruować mysqli, aby używał sha_256? Nie mogę znaleźć tego w tym pytaniu ani w dokumentacji mysqli.
 – 
Selivanov Pavel
20 grudzień 2019, 00:29
Chociaż w Twoim przypadku pojawia się komunikat, że MySQL nie mógł Cię zalogować. Zwykle dzieje się tak, gdy popełniłeś błąd w nazwie użytkownika, haśle lub nie przyznałeś uprawnień. Jeśli to błąd PHP, powinieneś zobaczyć komunikat, że klient nie może rozpoznać metody uwierzytelniania
 – 
Dharman
20 grudzień 2019, 00:35
Tak myślałem, ale ten sam kod php działa dobrze z tym samym użytkownikiem i hasłem, jeśli wtyczka auth to 'mysql_native_hashing'.
 – 
Selivanov Pavel
20 grudzień 2019, 00:38
Właściwie nie znam odpowiedzi na twoje pytanie. Znalazłem te przydatne linki: php.net/manual/en/mysqli.options .php i dev.mysql.com /doc/refman/5.6/pl/…
 – 
Dharman
20 grudzień 2019, 00:48

1 odpowiedź

Wygląda więc na to, że PHP 7.2.25 (wersja z 21 listopada 2019 r.) Nie obsługuje autoryzacji MySQL „sha256_password” dla połączeń bez SSL.

0
Selivanov Pavel 20 grudzień 2019, 23:59
Czy możesz dodać odniesienie do miejsca, w którym to znalazłeś?
 – 
user3783243
23 grudzień 2019, 19:17