2012-04-19 20 views
47

He estado usando SQL Server y ahora estoy usando MySQL para un proyecto. Con SQL Server, nuestros desarrolladores pueden conectarse a la base de datos remota en sus máquinas locales si conocen el host, el nombre de usuario y la contraseña. Con MySQL, sin embargo, para dar acceso a un desarrollador de sus máquinas locales, he estado teniendo que entrar a MySQL y ejecutar:Permitir todas las conexiones remotas, MySQL

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

Dónde address es la dirección IP de la máquina del desarrollador. Por supuesto, si cambian de red, tengo que ejecutarla de nuevo. ¿Hay alguna manera de permitir todas las conexiones remotas como lo he experimentado con SQL Server, o es una mala idea por alguna razón? Aún tenemos nombre de usuario y contraseña. Obviamente estoy un poco confundido.

Además, esta es una base de datos de desarrollo y solo se puede acceder desde nuestra red interna. Entiendo por qué es una mala idea dar acceso a todos a una base de datos de producción.

+0

Hola. Tengo el mismo problema e hice todo el comando sugerido pero no puedo acceder al acceso remoto. por favor, ayúdame. –

Respuesta

114

Como ha señalado Ryan anterior, el comando que necesita es

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

Sin embargo, tenga en cuenta que la documentación indica que para que esto funcione, otra cuenta de usuario desde localhost debe ser creado para el mismo usuario ; de lo contrario, la cuenta anónima creada automáticamente por mysql_install_db tiene prioridad porque tiene una columna de host más específica.

En otras palabras; para que el usuario user pueda conectarse desde cualquier servidor; 2 cuentas deben crearse como sigue:

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

leer la documentación completa here.

Y aquí está la pieza relevante para la referencia:

Después de conectar al servidor como root, puede agregar nuevas cuentas. Los siguientes declaraciones utilizar GRANT para establecer cuatro nuevas cuentas:

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'; 

las cuentas creadas por estas declaraciones tienen las siguientes propiedades:

Dos de las cuentas tienen un nombre de usuario de Monty y una contraseña de some_pass. Ambas cuentas son cuentas de superusuario con privilegios completos para hacer cualquier cosa. La cuenta 'monty' @ 'localhost' solo puede usarse cuando se conecta desde el host local. La cuenta 'monty' @ '%' usa el comodín '%' para la parte del host, por lo que se puede usar para conectarse desde cualquier host .

Es necesario tener ambas cuentas para que monty pueda conectar desde cualquier lugar como monty.Sin la cuenta de localhost, la cuenta de usuario anónimo para localhost creada por mysql_install_db tendría prioridad cuando monty se conecta desde el host local . Como resultado, monty sería tratado como un usuario anónimo. La razón de esto es que la cuenta de usuario anónimo tiene un valor de columna más anfitrión específico que el 'Monty' @ cuenta '%' y llega así anteriormente en el orden de la tabla de usuario tipo. (Ordenación de la tabla de usuario se discute en la Sección 6.2.4 , “Control de acceso, nivel 1: Comprobación de la conexión”.)

Eso parece tonto a mí si no estoy mal entendido esto.

+0

Funcionó perfectamente. ¡Gracias! –

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

permitirá a un usuario específico para conectarse desde cualquier lugar.

Es malo porque elimina un poco el control de seguridad, es decir, si una cuenta está en peligro.

+2

desearía poder aceptar la tuya también. ¡Gracias! –

+2

Una cosa más que tuve que hacer cambiar fue la interfaz de enlace TCP. Como tuve que conectarme a una instancia de mysql alojada en la nube, cambié "bind-address = 0.0.0.0" en /etc/mysql/my.cnf, el valor predeterminado es 127.0.0.1, donde mysql solo escucha en la interfaz loopback local y no toma llamadas desde redes externas. –

+0

He estado luchando por encontrar la manera de conectarme desde cualquier lugar y estas soluciones me ayudaron a resolver ese problema inicial. Muchas gracias pero me he encontrado con un problema diferente. he tratado de cambiar el número de puerto de 80 a 8080. Ahora, cuando se utiliza http: // servidor: 8080/proyecto rápidamente se vuelve de nuevo a http: // servidor/proyecto da un 404 - archivo o directorio no encontrado error. ¿Cómo lo hago funcionar con el puerto 8080? Excelentes cosas – Kenny

18

Puede desactivar toda la seguridad mediante la edición de /etc/my.cnf:

[mysqld] 
skip-grant-tables 
+0

¡bueno! ¡Gracias! :) – Adrian

+0

me gusta este! – adbarads

2

También es necesario deshabilitar debajo de la línea en el archivo de configuración: bind-address = 127.0.0.1

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

Instalar y configurar mysql para conectarse desde cualquier lugar de forma remota

NO FUNCIONA CON mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)

En Ubuntu, instalar MySQL usando:

sudo apt-get install mysql-server 

Acabamos el siguiente en /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 

Entrar en DB del servidor utilizando

mysql -u root -p

Crear usuario de base de datos utilizando la siguiente declaración

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

cortafuegos abierta:

sudo ufw allow 3306 

Reiniciar MySQL

sudo service mysql restart 
+0

en todo caso, 'otorgue todos los privilegios en *. * A 'nombre de usuario' @ '%' identificado por 'contraseña';' ...pero de todos modos no funciona –

+0

sudo ufw allow 3306 Esto hizo la magia para mí :) –

+0

¡La respuesta más completa, gracias! –

Cuestiones relacionadas