Как предоставить разрешения удаленного доступа для сервера MySQL для пользователя? - PullRequest
112 голосов
/ 05 июня 2011

Если я сделаю SHOW GRANTS в моей базе данных MySQL, я получу

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Если я не ошибаюсь, root@localhost означает, что пользователь root может получить доступ к серверу только с localhost.Как я скажу MySQL предоставить root разрешение на доступ к этому серверу mysql с любой другой машины (в той же сети), тоже?

Ответы [ 9 ]

140 голосов
/ 05 июня 2011

Это дает root-доступ с тем же паролем с любого компьютера в *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Если разрешение имен не работает, вы также можете предоставить доступ по IP или подсети:

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

MySQL GRANT синтаксические документы.

89 голосов
/ 05 апреля 2013

Попробуйте:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;
43 голосов
/ 27 ноября 2014

Вам нужно предпринять некоторые шаги, чтобы убедиться, что сначала mysql, а затем пользователь root доступен извне:

  1. Отключить skip-networking in my.cnf (т.е.: /etc/mysql/my.cnf)

  2. Проверьте значение bind-address в my.cnf, если оно установлено на 127.0.0.1, вы можете изменить его на 0.0.0.0, чтобы разрешить доступ со всех IP-адресов или любого IP-адреса, с которого вы хотите подключиться.

  3. Предоставить удаленный доступ пользователю root с любого ip (или указать ваш ip вместо %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
    
  4. Перезапустите службу MySQL:

    sudo service mysql restart
    
32 голосов
/ 25 декабря 2014
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE Вы можете ограничить пользователя конкретной базой данных и конкретной таблицей.

'root'@'%' вы можете сменить root любым пользователем, которого вы создали, и% должен разрешить все IP.Вы также можете ограничить его, изменив% .168.1.1 и т. Д.

8 голосов
/ 27 июня 2013

Те SQL-гранты, которыми делятся другие, работают. Если вы все еще не можете получить доступ к базе данных, возможно, у вас есть ограничение брандмауэра для порта. Это зависит от типа вашего сервера (и любых маршрутизаторов между ними) в отношении того, как открыть соединение. Откройте входящий TCP-порт 3306 и назначьте ему аналогичное правило доступа для внешних компьютеров (все / подсеть / один IP / и т. Д.).

3 голосов
/ 22 сентября 2015

В моем случае я пытался подключиться к удаленному серверу mysql на центовой ОС. После прохождения многих решений (предоставление всех привилегий, удаление привязок ip, включение сетей) проблема все еще не решалась.

Как оказалось, при поиске различных решений я наткнулся на iptables, что позволило мне понять, что порт mysql 3306 не принимает соединения.

Вот небольшая заметка о том, как я проверил и решил эту проблему.

  • Проверка, принимает ли порт соединения:
telnet (mysql server ip) [portNo]

-Добавить правило таблицы ip, чтобы разрешить подключения к порту:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

-Не рекомендовал бы это для производственной среды, но если ваши iptables не настроены должным образом, добавление правил может все еще не решить проблему. В этом случае должно быть сделано следующее:

service iptables stop

Надеюсь, это поможет.

2 голосов
/ 21 февраля 2018

Откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf и прокомментируйте следующая строка:

#bind-address = 127.0.0.1
2 голосов
/ 29 ноября 2017

Два шага:

  1. настроить пользователя с подстановочным знаком:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    добавитьследующее:
    bind-address=0.0.0.0

перезагрузите сервер, у вас не должно возникнуть проблем с подключением к нему.

0 голосов
/ 07 марта 2016

Это сработало для меня.Но была странная проблема, что даже я попробовал сначала те, на которые это не влияло.Я обновил страницу phpmyadmin и получил, что она как-то работает.

Если вам нужен доступ к local-xampp-mysql.Вы можете перейти в xampp-shell -> открытие командной строки.

Затем mysql -uroot -p --port = 3306 или mysql -uroot -p (если установлен пароль).После этого вы можете предоставить эти доступы со страницы оболочки mysql (также может работать с localhost / phpmyadmin).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...