предоставить удаленный доступ к базе данных MySQL с любого IP-адреса

227

Я знаю эту команду:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Но тогда он позволяет мне предоставлять конкретный IP-адрес для доступа к этой удаленной базе данных MySQL. Что делать, если я хочу, чтобы любой удаленный хост мог получить доступ к этой базе данных MySQL? Как мне это сделать? В основном я делаю эту базу данных открытой, чтобы каждый мог получить к ней доступ.

  • 0
    Перед этим рассмотрим последствия для безопасности : security.stackexchange.com/questions/63881/…
  • 1
    не каждая система является производственной системой. некоторые люди нуждаются в этом для развития.
Теги:
grant

19 ответов

221
TO 'user'@'%'

% - это подстановочный знак - вы также можете сделать '%.domain.com' или '%.123.123.123' и что-то в этом роде, если вам нужно.

  • 0
    Я все еще получаю ОШИБКУ 1045 (28000) после этой простой команды.
  • 0
    @kristopolous Есть много вещей, которые могут вызвать это. Эта команда о удаленном доступе (две разные машины). Если это не то, что вы делаете, это неправильная команда. Вам все еще нужен правильный пароль и другие вещи.
Показать ещё 1 комментарий
138

Включить удаленный доступ (грант) Главная/Учебники/Mysql/Разрешить удаленный доступ (грант) Если вы попытаетесь подключиться к серверу mysql с удаленной машины и выполните ошибку, как показано ниже, эта статья для вас.

ОШИБКА 1130 (HY000): Хост '1.2.3.4 не разрешен для подключения к этому Сервер MySQL

Измените конфигурацию mysql

Начните с редактирования файла конфигурации mysql

vim /etc/mysql/my.cnf

Прокомментируйте следующие строки.

#bind-address           = 127.0.0.1
#skip-networking

Если вы не найдете строку skip-network, добавьте ее и закомментируйте.

Перезагрузите сервер mysql.

~ /etc/init.d/mysql restart

Изменить привилегию GRANT

Вы можете быть удивлены, увидев даже после этого изменения, вы не получаете удаленный доступ или не получаете доступ, но не можете использовать все базы данных.

По умолчанию, имя пользователя и пароль mysql, которые вы используете, имеют доступ к локальному серверу mysql. Поэтому необходимо обновить привилегии.

Запустите команду, как показано ниже, для доступа ко всем машинам. (Замените USERNAME и PASSWORD своими учетными данными.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Выполните команду, как показано ниже, чтобы получить доступ к определенному IP-адресу. (Замените USERNAME и PASSWORD своими учетными данными.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Вы можете заменить 1.2.3.4 своим IP-адресом. Вы можете многократно выполнять команду выше для доступа к GRANT из нескольких IP-адресов.

Вы также можете указать отдельный USERNAME и PASSWORD для удаленного доступа.

Вы можете проверить окончательный результат:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Наконец, вам также может потребоваться запустить:

mysql> FLUSH PRIVILEGES;

Тестовое соединение

От терминала/командной строки:

mysql -h HOST -u USERNAME -pPASSWORD

Если вы получаете оболочку mysql, не забудьте запустить базы данных шоу; чтобы проверить, есть ли у вас права на удаленные компьютеры.

Бонусный совет: отменять доступ

Если вы случайно предоставляете доступ пользователю, тогда лучше отмените выбор.

После этого будут отменены все параметры USERNAME со всех компьютеров:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Если вы видите привилегию USAGE после выполнения команды REVOKE, это будет нормально. Это так же хорошо, как никакой привилегии. Я не уверен, можно ли его отозвать.

  • 4
    Обратите внимание, что мне пришлось изменить файл /etc/mysql/mysql.conf.d/mysqld.cnf вместо /etc/mysql/my.cnf чтобы закомментировать часть bind-address . Строка #skip-networking отсутствует, и добавление и комментирование строки не должно влиять.
  • 1
    На MariaDB 10.1.26 файл конфигурации находится в /etc/mysql/mariadb.conf.d/50-server.cnf
Показать ещё 2 комментария
36

Предполагая, что вышеуказанный шаг завершен, и порт 3306 MySql доступен для удаленного доступа; Не забудьте связать публичный IP-адрес в конфигурационном файле mysql.

Например, на моем сервере ubuntu:

#nano /etc/mysql/my.cnf

В файле найдите раздел [mysqld] и добавьте новый адрес связывания, в этом примере это 192.168.0.116. Это будет выглядеть примерно так.

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

вы можете удалить привязку localhost (127.0.0.1), если вы выберете, но тогда вам нужно конкретно указать IP-адрес для доступа к серверу на локальном компьютере.

Затем последний шаг - перезапустить сервер MySql (на ubuntu)

stop mysql

start mysql

или #/etc/init.d/mysql restart для других систем

Теперь к базе данных MySQL можно получить доступ удаленно:

mysql -u username -h 192.168.0.116 -p
  • 0
    /etc/init.d/mysql reload должно быть достаточно
  • 0
    Я только что сделал это и не смог подключиться к серверу mysql удаленно. Затем я попытался закомментировать адреса привязки, и это сработало. Я также попытался войти на сервер с помощью mysql -u <user> -p без указания хоста, и это сработало, поэтому кажется, что «вы можете удалить привязку localhost (127.0.0.1), если хотите, но тогда вам нужно специально дать IP-адрес для доступа к серверу на локальной машине. " не является правильным. (Ubuntu 12.04 LTS сервер mysql Ver 14.14 Distrib 5.5.34)
Показать ещё 3 комментария
25

Для тех, кто потрудился с этим, вот как я получил привилегии, надеюсь, что это поможет кому-то

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Как отмечено % является подстановочным знаком, и это позволит любому IP-адресу подключиться к вашей базе данных. Предположение, которое я здесь делаю, - это когда вы подключаетесь, у вас будет пользователь с именем root (который по умолчанию используется). Подайте корневой пароль, и вам хорошо идти. Обратите внимание, что у меня нет одиночных кавычек (') вокруг корня пользователя.

  • 0
    Почему важно удалять одинарные кавычки у пользователя? Почему это отличается от других ответов (и руководства)?
  • 0
    это единственный, который работал на меня
21

Изменения файла конфигурации необходимы для включения соединений через localhost.

Чтобы подключиться через удаленные IP-адреса, войдите в систему как "корневой" пользователь и запустите следующие запросы в mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Это создаст нового пользователя, доступного как на локальном, так и на удаленных IP-адресах.

Также прокомментируйте следующую строку из файла my.cnf, расположенного в файле /etc/mysql/my.cnf

bind-address = 127.0.0.1

Перезагрузите mysql, используя

sudo service mysql restart

Теперь вы можете подключиться удаленно к вашему mysql.

  • 2
    Это не отвечает на вопрос.
  • 0
    @ChristopheHarris, почему ты так чувствуешь? Ответ ясно дает пошаговую инструкцию о том, как создать нового пользователя в MySQL, который позволяет как локальному, так и удаленному доступу к БД использовать этого пользователя. Вы можете объяснить, plesae?
Показать ещё 1 комментарий
18

Используйте эту команду:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Затем:

FLUSH PRIVILEGES; 

Затем закомментируйте следующую строку в файле "/etc/mysql/mysql.conf.d/mysqld.cnf" (обязательно!):

bind-address = 127.0.0.1 

Работает для меня!

  • 0
    Это работает для меня. Сервер Ubuntu
16

Выполните следующее:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Затем выполните попытку подключения с указанного вами IP-адреса:

mysql -h address-of-remove-server -u root -p   

Вы должны иметь возможность подключиться.

  • 0
    , в * скобках
13

Вы можете решить проблему MariaDB через эту команду:

Примечание:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

% является подстановочным знаком. В этом случае это относится ко всем IP-адресам.

  • 3
    в mysql вам необходимо (1) .change my.cnf content (2) .grant удаленный пользователь (3) взаимодействовать с брандмауэром для прослушивания порта 3306.
  • 0
    Ты спас мой день. Ценить это!
8
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
4

Редактировать файл:

/etc/mysql/percona-server.cnf

Добавить ниже код в файл.

[mysqld] bind-address = 0.0.0.0

Создайте пользователя для удаленного доступа.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Работает весь сервер Linux,

Для MSWin c:\Поиск местоположения insatallation\путь к файлу

  • 0
    [mysqld] нужно добавить в файл, иначе не работает должным образом
3
  • START MYSQL с помощью администратора
    • mysql -u admin-user -p (ВВЕДИТЕ ПАРОЛЬ НА ПРОМПТ)
  • Создайте нового пользователя:
    • СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'newuser' @'%' IDENTIFIED BY 'password'; (% → anyhost)
  • Привилегии гранта:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @'%';
    • ПРИВИЛЕГИИ FLUSH;

Если вы используете экземпляр EC2, не забудьте добавить входящие правила в группу безопасности с помощью MYSQL/Aurura.

2

Откройте mysql console и выполните следующую команду (введите имя базы данных, имя пользователя и пароль):

Предоставить все на имя вашей базы данных. * Для admin @'%', идентифицированного как 'yourRootPassword';

Затем выполните:

ПРИВИЛЕГИИ ПРОМЫВКИ;

Откройте командную строку и откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf используя любой редактор с root privileges.

Например:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Затем закомментируйте следующую строку:

bind-address = 127.0.0.1

Перезапустите mysql, чтобы отразить изменения, используя команду:

sudo service mysql restart

Наслаждаться ;)

2

Просто создайте пользователя в какой-либо базе данных, например

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Затем перейдите к

sudo nano/etc/mysql/mysql.conf.d/mysqld.cnf и изменить адрес bind-address = 127.0.0.1 строки bind-address = 127.0.0.1 на bind-address = 0.0.0.0

После этого вы можете подключиться к этой базе данных с любого IP-адреса.

1

Вам нужно изменить файл конфигурации mysql:

Начните с редактирования файла конфигурации mysql

vim /etc/mysql/my.cnf

Добавить:

bind-address = 0.0.0.0
0

то, что работало в Ubuntu, это предоставление пользователю всех привилегий:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

и установить адрес привязки в /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

затем перезапускаем демон mysql:

service mysql restart
0

Если вы хотите предоставить удаленный доступ к вашей базе данных с любого IP-адреса, выполните команду mysql и после этого выполните следующую команду.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
0

Например, в моем CentOS

sudo gedit/etc/mysql/my.cnf

прокомментируйте следующие строки

# bind-address = 127.0.0.1

то

sudo service mysqld restart

0

В панелях веб-сайтов, таких как cPanel, вы можете добавить единственный % (процентный знак) в разрешенных именах хостов для доступа к вашей базе данных MySQL.

Добавив один %, вы можете получить доступ к своей базе данных с любого IP или веб-сайта даже из настольных приложений.

  • 0
    пожалуйста, не обращайтесь к таким вещам, как cPanel, когда представлен прямой запрос, это никогда не будет показывать работающий результат для кого-либо еще
  • 0
    @TobiasHagenbeek Спасибо за ваш отзыв. Этот метод / трюк не придуман мной (это распространено в интернете). Но я один из тестеров этого метода, и я обнаружил, что это самый простой и рабочий метод, поэтому я разместил его здесь. Я знаю, что в этом методе есть некоторые угрозы безопасности, которыми можно пренебречь.
-7

Вы можете отключить всю безопасность, отредактировав /etc/my.cnf:

skip-grant-tables
  • 0
    это удаляет все требования к паролю
  • 4
    Обратите внимание, что не рекомендуется включать эту опцию в производственной среде, так как это позволяет любому подключаться без пароля!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню