Настройка MariaDB для удаленного клиентского доступа
По умолчанию некоторые пакеты MariaDB для обеспечения безопасности привязывают MariaDB к 127.0.0.1 (адрес обратной связи) с помощью директивы конфигурации bind-address. Старые пакеты MySQL иногда полностью отключали TCP/IP-сети с помощью директивы skip-networking. Прежде чем перейти к настройке, давайте объясним, что каждый из них делает:
- skip-networking довольно проста. Она просто сообщает MariaDB работать без каких-либо опций TCP/IP-сети.
- bind-address требует немного предварительной информации. У данного сервера обычно есть как минимум два сетевых интерфейса (хотя это необязательно) и может быть больше. Два наиболее распространённых – это устройство сети обратной связи и физическая сетевая карта (NIC), которая позволяет вам взаимодействовать с сетью. По умолчанию MariaDB привязана к интерфейсу обратной связи, так как это делает невозможным подключение к TCP-порту на сервере из удалённого хоста (bind-address должен ссылаться на локальный IP-адрес, в противном случае вы получите ошибку и MariaDB не запустится). Конечно, это нежелательно, если вы хотите использовать TCP-порт из удалённого хоста, поэтому вы должны удалить эту директиву bind-address (MariaDB поддерживает только один bind-address, но привязывается к 0.0.0.0 или :: (все IP), если директива bind-address отсутствует).
Если bind-address привязан к 127.0.0.1 (localhost), нельзя подключиться к серверу MariaDB с других хостов или с того же хоста через TCP/IP на другом интерфейсе, кроме обратной связи (127.0.0.1). Например, это не сработает (подключение с именем хоста, указывающим на локальный IP хоста):
(/my/maria-10.4) ./client/mysql --host=myhost --protocol=tcp --port=3306 test ERROR 2002 (HY000): Can't connect to MySQL server on 'myhost' (115) (/my/maria-10.4) telnet myhost 3306 Trying 192.168.0.11... telnet: connect to address 192.168.0.11: Connection refused
Использование 'localhost' работает при привязке с bind_address:
(my/maria-10.4) ./client/mysql --host=localhost --protocol=tcp --port=3306 test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. ...
Поиск файла параметров
Чтобы MariaDB могла принимать подключения с удаленных хостов, вам необходимо отредактировать файл параметров. Подробнее об этом см. в разделе Настройка MariaDB с помощью my.cnf.
Общие расположения файлов параметров:
* /etc/my.cnf (*nix/BSD) * $MYSQL_HOME/my.cnf (*nix/BSD) *Most Notably /etc/mysql/my.cnf * SYSCONFDIR/my.cnf (*nix/BSD) * DATADIR\my.ini (Windows)
Вы можете увидеть, какие файлы параметров читаются и в каком порядке, выполнив:
shell> mysqld --help --verbose ./sql/mysqld Ver 10.4.2-MariaDB-valgrind-max-debug for Linux on x86_64 (Source distribution) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Starts the MariaDB database server. Usage: ./sql/mysqld [OPTIONS] Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
Последняя строка показывает, какие файлы параметров читаются.
Редактирование файла параметров
После того, как вы нашли файл параметров, откройте его в текстовом редакторе и попробуйте найти строки подобные этому в разделе [mysqld]:
[mysqld]
...
skip-networking
...
bind-address = <some ip-address>
...
(Строки могут быть не в таком порядке, и порядок не важен.)
Если вы найдете эти строки, убедитесь, что они оба прокомментированы (представлены символами решётки (#)), так что они выглядят так:
[mysqld]
...
#skip-networking
...
#bind-address = <some ip-address>
...
(Опять же, порядок этих строк не имеет значения)
Или просто добавьте следующие строки в конец вашего файла .my.cnf (обратите внимание, что имя файла начинается с точки) в вашем домашнем каталоге или в последнюю очередь в файле /etc/my.cnf.
[mysqld] skip-networking=0 skip-bind-address
Это работает, так как можно иметь любое количество разделов mysqld.
Сохраните файл и перезапустите демона или службу mysqld (см. Запуск и остановка MariaDB).
Вы можете проверить используемые параметры mysqld, выполнив:
shell> ./sql/mysqld --print-defaults ./sql/mysqld would have been started with the following arguments: --bind-address=127.0.0.1 --innodb_file_per_table=ON --server-id=1 --skip-bind-address ...
Не имеет значения, если у вас оставлена исходная --bind-address, так как более поздняя --skip-bind-address перепишет её.
Предоставление пользователям доступа из удаленных хостов
Теперь, когда ваша установка MariaDB настроена для приема подключений с удаленных хостов, нам нужно добавить пользователя, которому разрешено подключаться не только с 'localhost'. (Пользователи в MariaDB определяются как 'user'@'host', поэтому 'chadmaynard'@'localhost' и 'chadmaynard'@'1.1.1.1' (или 'chadmaynard'@'server.domain.local') — это разные пользователи, у которых могут быть совершенно разные разрешения и/или пароли.)
Для создания нового пользователя:
- войдите в mysql командную строку (или ваш любимый графический клиент, если хотите)
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 36 Server version: 5.5.28-MariaDB-mariadb1~lucid mariadb.org binary distribution Copyright (c) 2000, 2012, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
- если вас интересуют существующие удалённые пользователи, выполните следующее SQL-заявление на таблице mysql.user:
SELECT User, Host FROM mysql.user WHERE Host <> 'localhost'; +--------+-----------+ | User | Host | +--------+-----------+ | daniel | % | | root | 127.0.0.1 | | root | ::1 | | root | gandalf | +--------+-----------+ 4 rows in set (0.00 sec)
(Если у вас свежая установка, нормально, что не возвращаются строки)
Теперь вам нужно принять некоторые решения. В основе каждого оператора GRANT лежат следующие вещи:
- список разрешенных привилегий
- к какой базе данных/таблицам эти привилегии относятся
- имя пользователя
- хост, с которого пользователь может подключаться
- и необязательно пароль
Часто люди хотят создать пользователя "root", который может подключаться откуда угодно, поэтому в качестве примера мы сделаем именно это, но улучшим его, создав пользователя root, который может подключаться из любой точки моей локальной сети (LAN), которая имеет адреса в подсети 192.168.100.0/24. Это улучшение, потому что открытие сервера MariaDB для Интернета и предоставление доступа ко всем хостам — плохая практика.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
(% — символ подстановки)
Дополнительную информацию о том, как использовать GRANT, см. на странице GRANT.
На этом этапе мы достигли своей цели и имеем пользователя 'root', который может подключаться из любой точки LAN 192.168.100.0/24.
Порт 3306 настроен в брандмауэре
Ещё один момент, который следует учитывать, это настройка брандмауэра для разрешения входящих запросов от удалённых клиентов:
В RHEL и CentOS 7 может потребоваться настроить брандмауэр для разрешения TCP-доступа к MySQL с удалённых хостов. Для этого выполните обе эти команды:
firewall-cmd --add-port=3306/tcp firewall-cmd --permanent --add-port=3306/tcp
Ограничения
- Если ваша система использует программный брандмауэр (или находится за аппаратным брандмауэром или NAT), вы должны разрешить подключения, предназначенные для TCP-порта, на котором работает MariaDB (по умолчанию и почти всегда 3306).
- Чтобы отменить это изменение и больше не разрешать удаленный доступ, просто удалите строку
skip-bind-addressили раскомментируйте строку bind-address в вашем файле параметров. В итоге в выводе от./sql/mysqld --print-defaultsдолжна быть опция--bind-address=127.0.0.1и не должно быть--skip-bind-address.
Изначальная версия этой статьи была скопирована с разрешения с http://hashmysql.org/wiki/Remote_Clients_Cannot_Connect 30 октября 2012 года.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/