Введіть ім'я домену:
.ua .com.ua .in.ua .org.ua
.ru .com .net .org
Показати всі домени

Налаштування віддаленої бази даних

Відповіді на запитання від компанії "Український хостинг".

Налаштування віддаленої бази даних

У міру зростання сайту або програми трафік буде збільшуватися і ресурсів сервера може стати недостатньо. Якщо веб-сервер і сервер баз даних обслуговуються одним сервером, збільшити продуктивність можливо, перемістивши сервер баз даних на окремий сервер.

Рекомендується створити не root користувача з доступом до sudo .

В інструкції використовується текстовий редактор nano, для якого потрібно виконати команду:

 yum install nano

В інструкції використовуються два сервери:

Перший сервер буде використовуватися для перевірки віддаленого підключення до бази даних, а на другому сервері буде встановлено та налаштовано сервер баз даних.

Виконуємо налаштування сервера:

  1. Підключаємось до другого сервера.

    Оновлюємо пакети:

     sudo yum -y update
  2. Встановлюємо MySQL ( MariaDB ) та допоміжні пакети:

     sudo yum install mariadb-server mariadb
  3. Запускаємо MariaDB:

     sudo systemctl start mariadb
  4. Запускаємо сценарій безпеки, що дозволяє видалити деякі небезпечні значення за умовчанням, а також обмежити доступ до системи баз даних:

     sudo mysql_secure_installation

    Після виконання запиту з'явиться повідомлення із запитом пароля root.

    Оскільки MySQL був тільки що встановлений і пароля root немає, необхідно просто натиснути enter.

    Після цього необхідно натиснути 'y', щоб задати пароль для користувача root.

    Після призначення пароля та підтвердження пароля з'явиться повідомлення:

    Для інших питань необхідно просто натиснути клавішу enter у кожному питанні, щоб прийняти значення за замовчуванням:

  5. Включаємо MariaDB для запуску під час завантаження:

     sudo systemctl enable mariadb
  6. Створюємо нові підписані файли сертифікатів.

    Створюємо новий каталог для файлів сертифікатів:

     sudo mkdir -p /etc/certs

    Змінюємо власника каталогу сертифікатів користувача denis:

     sudo chown -R denis:denis /etc/certs/

    Заходимо до папки /etc/certs

     cd /etc/certs

    Створюємо новий файл сертифіката CA.pem, виконавши наведені нижче команди, вказавши при заповненні власну інформацію:

     sudo openssl genrsa 2048 > ca-key.pem
     sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

    Інформація сертифіката CA повинна відрізнятися від інформації про серверний сертифікат та клієнтський сертифікат.

  7. Створюємо новий серверний сертифікат server-cert.pem і файл server-key.pem, виконавши наведені нижче команди, вказавши при заповненні власну інформацію:

     sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
     sudo openssl rsa -in server-key.pem -out server-key.pem
     sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
  8. Для того, щоб до сервера баз даних міг підключитися тільки клієнт з відповідними файлами сертифікатів, створюємо новий клієнтський сертифікат client-req.pem та файл client-key.pem, виконавши наведені нижче команди, вказавши при заповненні власну інформацію:

     sudo openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
     sudo openssl rsa -in client-key.pem -out client-key.pem
     sudo openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
  9. Переконуємося, що у створених файлах сертифікатів немає помилок:

     sudo openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
  10. Змінюємо власника каталогу сертифікатів на користувача mysql, а також змінюємо дозволи всіх файлів ключів, виконавши наступні команди:

     sudo chown -R mysql:mysql /etc/certs/ sudo chmod 600 client-key.pem server-key.pem ca-key.pem

    Відкриваємо конфігураційний файл MySQL:

     sudo nano /etc/my.cnf

    і в розділі mysqld додаємо рядок:

     bind-address=93.190.42.60

    де 93.190.42.60 IP-адреса сервера баз даних.

    А так само рядки:

     ssl-ca=/etc/certs/ca.pem ssl-cert=/etc/certs/server-cert.pem ssl-key=/etc/certs/server-key.pem

    Також у нижній частині файлу додаємо рядки:

     [client] ssl-ca=/etc/certs/ca.pem ssl-cert=/etc/certs/client-cert.pem ssl-key=/etc/certs/client-key.pem

    Зберігаємо зміну у файлі, натиснувши клавіші Ctrl+x , потім клавішу y і потім клавішу Enter.

  11. Перезавантажуємо MySQL сервер для оновлення конфігурації.

     sudo systemctl restart mariadb

    Підключаємося до оболонки MySQL, вказавши пароль користувача root:

     sudo mysql -u root -p
  12. Перевіряємо підключення та SSL виконавши команди:

     SHOW VARIABLES LIKE '%ssl%'; STATUS;
  13. Виходимо з оболонки MySQL:

     exit;
  14. Для відкриття 3306 порту відкриваємо файл /etc/sysconfig/iptables:

     sudo nano /etc/sysconfig/iptables

    та після рядка:

     -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

    вказуємо рядок:

     -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

    Зберігаємо зміну у файлі, натиснувши клавіші Ctrl+x , потім клавішу y і потім клавішу Enter

  15. Перезавантажуємо iptables для набуття чинності:

     sudo service iptables reload
  16. Створюємо базу даних для подальшого підключення до неї віддаленого сервера.

    Підключаємося до MySQL як root:

     sudo mysql -u root -p
  17. Для прикладу створюємо базу даних з ім'ям sitedb:

     CREATE DATABASE sitedb;

    І користувача бази даних з ім'ям userdb та паролем passworddb, який зможе віддалено підключатися до бази даних з першого сервера, що має IP адресу 93.190.42.52:

     CREATE USER 'userdb'@'93.190.42.52' IDENTIFIED BY 'passworddb';
  18. Передаємо користувачеві всі права на базу даних sitedb:

     GRANT ALL PRIVILEGES ON sitedb.* TO 'userdb'@'93.190.42.52';
  19. Оновлюємо налаштування:

     FLUSH PRIVILEGES;
  20. Закриваємо командний рядок MySQL:

     exit;

Перевірка віддаленого підключення

  1. Переходимо на перший сервер і встановлюємо клієнтські інструменти MySQL, щоб отримати доступ до віддаленої бази даних:

     sudo yum install mariadb
  2. Створюємо папку, в яку будуть скопійовані файли сертифікатів із сервера баз даних:

     mkdir mysql-hakase

    Переходимо в папку mysql-hakase:

     cd mysql-hakase

    Копіюємо файли сертифікатів, виконавши наступні команди та вказавши при виконанні кожної команди пароль користувача root, створеного на сервері 93.190.42.60:

     sudo scp root@93.190.42.60:/etc/certs/ca.pem /home/denis/mysql-hakase sudo scp root@93.190.42.60:/etc/certs/client-cert.pem /home/denis/mysql-hakase sudo scp root@93.190.42.60:/etc/certs/client-key.pem /home/denis/mysql-hakase

    І перевіряємо наявність завантажених файлів:

     ls
  3. Підключаємося до сервера баз даних з IP адресою 93.190.42.60, використовуючи завантажені файли сертифікатів та ім'я користувача userdb, створеного раніше на сервері баз даних (після запиту пароля необхідно вказати пароль користувача userdb):

     sudo mysql -h 93.190.42.60 -u userdb --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -p
  4. Після підключення виконуємо команду, щоб переконатися, що підключення захищене:

     status;
  5. Відключаємось від сервера баз даних:

     exit;

Див. також:

Будь ласка, виберіть мову сайту за промовчанням: