Введіть те саме ім'я користувача двома різними шляхами, і MariaDB може автентифікувати вас як два різні облікові записи. Записи прив'язані до користувача й хоста разом, тому 'reporter'@'localhost' і 'reporter'@'10.90.0.23' — окремі рядки з окремими паролями й окремими привілеями. Через VPN цікаве питання не в тому, яке ім'я ввів користувач, а в тому, яку адресу джерела побачив сервер.

Визначте джерело, яке сервер справді бачить

Працюйте у зворотному напрямку від хоста бази даних, а не від ноутбука. Адреса, яку клієнт вважає своєю, — лише один із кількох варіантів:

PathSource MariaDB sees
Routed tunnel, no translationThe client's inner VPN address
Gateway source translationThe gateway's translated address
SSH local forwardThe SSH server's address
Public exit, no tunnelWhatever the ISP handed out

Використовуйте докази на боці сервера, щоб це вирішити. Журнал з'єднань, список активних сеансів або тимчасовий запис у загальному журналі показують адресу, яку сервер прийняв. Публічна IP-адреса ноутбука з браузера — інший факт і часто оманливий.

Зіставте обліковий запис, який вибрала MariaDB

Вибір запису дотримується задокументованого порядку, а не об'єднання привілеїв. Точний збіг хоста має пріоритет перед шаблонним знаком, а рядки анонімного користувача беруть участь у зіставленні так, що це дивує тих, хто вважає, що вирішує саме ім'я. Сервер вибирає один рядок; він не об'єднує привілеї кожного однойменного рядка. Прочитати довідку один раз цінніше, ніж півдня перебирати здогадки.

Це означає, що додавання привілею до 'reporter'@'%' може нічого не змінити, якщо сеанс автентифікувався як 'reporter'@'10.90.0.23'. Виправлення має потрапити в той рядок, який було вибрано, тому ідентифікація запису передує редагуванню привілеїв.

Прочитайте запис, який сеанс справді використовує

SELECT USER(), CURRENT_USER();
SHOW GRANTS;

CURRENT_USER() називає запис, що автентифікував сеанс; USER() повідомляє, що запросив клієнт, і може відрізнятися. Виконуйте їх як звичайні запити верхнього рівня, а не зсередини збереженої процедури з контекстом визначника, інакше відповіді опишуть власника процедури, а не ваш сеанс.

Невдалий вхід не може виконати нічого з цього, і це той випадок, коли адміністратор має перевірити визначення записів і докази з'єднання сервера. Плануйте це: людина, яка налагоджує відхилений вхід, зазвичай не має SQL-сеансу, щоб запитати.

Відокремте доступність від автентифікації

Текст помилки говорить, на якому рівні ви перебуваєте. Відмова в з'єднанні або тайм-аут означає, що клієнт так і не досяг слухача, тому запис і його пароль ще не під питанням. Відповідь про відмову в доступі означає, що сервер відповів, що доводить доступність і вказує на запис, збіг хоста або облікові дані.

Мережеві передумови — окремий список: слухач, прив'язаний до потрібної адреси, а не лише до loopback, дозволений трафік на налаштований порт і зворотний маршрут для відповіді. Кожен може відмовити незалежно, і робочий тунель не передбачає жодного з них. Слухач на loopback приймає локальні з'єднання й відхиляє кожне віддалене, що дає відмову в з'єднанні, схожу на блокування брандмауера.

Перевірте адресу прив'язки, перш ніж відкривати заявку мережевій команді. ss -lntp на хості бази даних показує, яка адреса й порт справді слухають, і цей один рядок виключає цілу категорію здогадок.

Виправляйте точково, потім перевірте обидва напрямки

Створіть потрібний запис, кваліфікований хостом, через затверджений процес організації, з обліковими даними з підтримуваного сховища, а не спільними, вставленими в заявку. Надайте лише ті операції зі схемою, які потрібні завданню. Перетворення невдалого віддаленого входу на root-запис, політику надання всього або загальний шаблонний хост змушує тест пройти й прибирає контроль, який ви перевіряли. Привілей, доданий поспіхом, — той, який потім ніхто не видаляє.

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

Нарешті, запишіть спостережувану адресу джерела та ім'я запису разом. Тунель забезпечує доступність; MariaDB і далі вибирає й авторизує власний запис, а наступній людині потрібні обидва факти, щоб відтворити ваш результат.

Схожі статті