По умолчанию подключиться к MySQL можно только с того же хоста. Чтобы получить доступ к серверу с другого IP-адреса, нужно настроить удалённое подключение.
Внимание! После ручной правки конфигураций MySQL - my.cnf требуется перезапустить сервер MySQL.
ISPmanager5 — Службы
— MySQL/MariaDB
— Рестарт
или в консоли сервера:
systemctl restart mysql systemctl restart mariadb
Создание удалённого подключения в ISPmanager 6
В панели ISPmanager — раздел Настройки
— Серверы баз данных выделите сервер MySQL
и нажмите кнопку Изменить
.
В открывшемся окне поставьте галочку Удаленный доступ
. В поле IP-адрес
выберите IP, по которому будет доступно подключение.
В панелях с версией ниже 5.95 опции Удаленный доступ
нет. Необходимо выполнить настройки вручную. В конфигурационном файле /etc/my.cnf
(/etc/mysql/my.cnf
для Debian) должна отсутствовать строка skip-networking
, если она присутствует — следует её закомментировать:
#skip-networking
Также следует добавить/изменить:
bind-address = IP_сервера
Для удалённого подключения к базам данных требуется при создании базы отметить Удалённый доступ
.
Если при создании базы вы не выбрали данную опцию, её можно указать в Управлении пользователями баз данных
. Для этого перейдите в раздел Инструменты
— Базы данных
— выделите нужную базу — нажмите кнопку Пользователи
— затем кнопку Изменить
.
Пустое поле списка IP-адресов делает возможным подключение с любого IP.
Создание удалённого подключения в консоли
В конфигурационном файле /etc/my.cnf
(/etc/mysql/my.cnf
для Debian) должна отсутствовать строка skip-networking
, если она присутствует — следует её закомментировать:
#skip-networking
Также следует добавить/изменить:
bind-address = IP_сервера
Подключитесь к сервер MySQL суперпользователем:
mysql -u root -p
Далее создайте пользователя, например, dbuser
(если вместо % указать localhost, авторизация будет возможна только с текущего сервера):
create user 'dbuser'@'%' identified by 'password'
Можно проверить, что мы создали, командой, выводящей всех пользователей с их хостом и паролем:
select user,host,password from mysql.user;
Создайте базу, например, testdb
:
create database testdb;
Предоставление прав пользователю
Права, назначенные пользователю, определяют, какие действия он сможет выполнять с базой данных. Можно назначать несколько привилегий одному пользователю.
Наиболее часто назначаемые права:
ALL PRIVILEGES
— пользователю предоставляется полный доступ к базе данных.CREATE
— пользователю разрешено создавать базы данных и таблицы.DROP
— пользователю разрешено удалять базы данных и таблицы.DELETE
— пользователю разрешено удалять строки из определенной таблицы.INSERT
— пользователю разрешено вставлять строки в определенную таблицы.SELECT
— пользователю разрешено читать базу данных.UPDATE
— пользователю разрешено обновлять строки таблицы.GRANT OPTION
— пользователю разрешено изменять права других пользователей.
Назначить привилегии пользователю можно, используя синтаксис:
GRANT permission ON database.table TO 'username'@'%';
где permission
— вид предоставляемой привилегии.
Например, установите полные права на базу testdb
пользователю dbuser
:
GRANT ALL PRIVILEGES ON testdb.* TO 'dbuser'@'%';
Предоставить права на вставку:
GRANT INSERT ON *.* TO 'dbuser'@'%';
Предоставить несколько привилегий пользователю:
GRANT SELECT, INSERT, DELETE ON testdb.* TO 'dbuser'@'%';
Можно ограничить права пользователя на добавление данных в определенной базе, указав её перед точкой. Для ограничения прав на доступ к определенной таблице укажите нужную таблицу после точки:
GRANT INSERT *database_name.table_name* TO 'dbuser'@'%';
Отозвать все привилегии пользователя:
REVOKE ALL PRIVILEGES ON testdb.* FROM 'dbuser'@'%';
Посмотреть текущие привилегии пользователя:
SHOW GRANTS FOR 'dbuser'@'%';
Удалить пользователя:
DROP USER 'dbuser'@'%';
После завершения настройки прав необходимо перезагрузить привилегии:
FLUSH PRIVILEGES;