Разрешить все удаленные подключения, MySQL

Я использовал SQL Server и теперь использую MySQL для проекта. С SQL Server наши разработчики могут подключаться к удаленной базе данных на своих локальных компьютерах, если они знают хост, имя пользователя, пароль. Однако с MySQL, чтобы предоставить разработчику доступ с их локальных компьютеров, мне пришлось войти в MySQL и выполнить:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges;

Где address - IP-адрес машины-разработчика. Конечно, если они меняют сети, я должен выполнить их снова. Есть ли способ разрешить все удаленные подключения, например, с SQL Server, или это плохая идея по какой-то причине? У нас есть имя пользователя и пароль. Я, очевидно, немного смущен.

Также: это база данных разработки и доступна только из нашей внутренней сети. Я понимаю, почему это плохая идея предоставить всем доступ к производственной базе данных.

Ответ 1

Как указано Райаном выше, вам нужна команда

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Однако обратите внимание, что документация указывает, что для этого необходимо создать другую учетную запись пользователя из localhost для одного и того же пользователя; в противном случае анонимная учетная запись, созданная автоматически с помощью mysql_install_db, имеет приоритет, поскольку она имеет более конкретный столбец хоста.

Иными словами; для того, чтобы пользователь user мог подключаться с любого сервера; 2 учетных записей необходимо создать следующим образом:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Прочитайте полную документацию здесь.

И вот соответствующий фрагмент для справки:

После подключения к серверу с правами администратора вы можете добавлять новые учетные записи. следующие заявления используют GRANT для создания четырех новых учетных записей:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';

Учетные записи, созданные этими операторами, имеют следующие Свойства:

У двух учетных записей есть имя пользователя monty и пароль some_pass. Оба аккаунта - суперпользователи с полными привилегиями делать что-либо. Учетную запись "monty" @localhost можно использовать только тогда, когда соединение с локальным хостом. В учетной записи 'monty' @'%' используется '%' подстановочный знак для главной части, поэтому его можно использовать для подключения с любого хоста.

Необходимо, чтобы обе учетные записи для monty могли подключаться из любого места как monty. Без учетной записи localhost анонимная учетная запись для localhost, созданная mysql_install_db будет иметь приоритет, когда monty соединяется с локальный хост. В результате, monty будет рассматриваться как анонимный пользователь. Причина этого в том, что учетная запись анонимного пользователя имеет больше конкретное значение столбца хоста, чем учетная запись "monty" @'%' и, таким образом, ранее в порядке сортировки таблицы пользователя. (сортировка пользовательской таблицы в разделе 6.2.4 "Контроль доступа, этап 1: проверка соединения".)

Мне кажется глупым, если я не понимаю это.

Ответ 2

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

[mysqld]
skip-grant-tables

Ответ 3

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

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

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

Ответ 4

Также вам нужно отключить строку ниже в файле конфигурации: bind-address = 127.0.0.1

Ответ 5

mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'

Ответ 6

Устанавливать и настраивать mysql для подключения из любого места удаленно

НЕ РАБОТАЕТ С mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)

В Ubuntu установите mysql, используя:

sudo apt-get install mysql-server

Введите только что-либо в /etc/mysql/my.cnf

[mysqld]
#### Unix socket settings (making localhost work)
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock

#### TCP Socket settings (making all remote logins work)
port            = 3306
bind-address = 0.0.0.0

Вход в БД с сервера с помощью

mysql -u root -p

Создайте пользователя БД, используя оператор ниже

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’;

Открыть брандмауэр:

sudo ufw allow 3306

Перезапустить mysql

sudo service mysql restart