Ошибка при подключении с веб-сервера к удаленному MySQL БД-серверу - PullRequest
0 голосов
/ 18 февраля 2020

Я пытался подключиться с веб-сервера Ubuntu версии 16.04 (работает на экземпляре 1 AWS, с PHP 7.0.33 и Apache 2.7.18), взаимодействующего с сервером базы данных с использованием MySQL 8.0.19 работает на другом экземпляре AWS (работает на Ubuntu версии 16.04).

Я настроил сервер базы данных и настроил его следующим образом:

Я редактирую файл / etc / mysql /mysql.conf.d/mysqld.cnf

Я добавляю следующее в раздел [mysqld] [mysqld]

require_secure_transport = on

Сохраняю файл и из консоли:

sudo mysql_ssl_rsa_setup --uid=mysql

Затем я перезагружаю mysql с помощью:

sudo systemctl restart mysql

Я создал базу данных и таблицы на этом сервере базы данных.

Я также создал удаленного пользователя на этом сервере базы данных следующим образом (IP-адрес и пользователь вымышлены):

CREATE USER 'Master'@'1.26.4.44' IDENTIFIED BY 'admin';

GRANT ALL PRIVILEGES ON sample_data_base.* TO ' Master'@'1.26.4.44';

FLUSH PRIVILEGES;

Exit

Я успешно проверил подключение к этому серверу БД с веб-сервера экземпляр клиента:

mysql -u Master -p   -h '1.26.4.44'

Однако, когда я использую следующий фрагмент кода PHP из экземпляра клиента веб-сервера, чтобы открыть соединение с сервером базы данных, я получаю сообщение об ошибке (см. ниже):

// set up for  remote DB access     
  $dbhost  = '1.26.4.44';    // Unlikely to require changing
  $dbname  = 'sample_data_base';   // Modify these...
  $dbuser  = 'Master';   // ...variables according
  $dbpass  = "admin";   // ...to your installation
  $appname = "test_app"; // ...and preference

$dbconnection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

   if ( !$dbconnection) 
  {
      echo "connection failed   ";
      die('Connect Error (' . mysqli_connect_errno() . ') '
        . mysqli_connect_error());
  }

Ошибка:

Connect Error (3159) Connections using insecure transport are prohibited while --require_secure_transport=ON

Так же, как к сведению, когда я закомментирую строку на сервере базы данных в файле /etc/mysql/mysql.conf. d / mysqld.cnf

# require_secure_transport = on

Нет проблем с подключением кода php к удаленному серверу базы данных.

Чего мне не хватает на стороне клиента веб-сервера, чтобы позволить подключиться к удаленному серверу БД из кода php?

1 Ответ

0 голосов
/ 18 февраля 2020

Вам нужны дополнительные настройки в вашей настройке БД:

$db = mysqli_init();
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);

$db->ssl_set(
    '/etc/mysql/ssl/client-key.pem',
    '/etc/mysql/ssl/client-cert.pem',
    '/etc/mysql/ssl/ca-cert.pem',
    NULL,
    NULL);

$link = mysqli_real_connect(
        $db, 'ip', 'user', 'password', 'db', 3306, NULL, MYSQLI_CLIENT_SSL);

if (!$link)
{
    die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
    // your queries should be here
     $db->close();
}

Надеюсь, это поможет.

...