mysql - remoto - permitir conexiones remotas mariadb
Permitir todas las conexiones remotas, MySQL (6)
Había 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. Sin embargo, con MySQL, para dar acceso a un desarrollador desde sus máquinas locales, he tenido que iniciar sesión en MySQL y ejecutar:
GRANT ALL ON *.* to user@address IDENTIFIED BY ''password'';
flush privileges;
Donde address
es la dirección IP de la máquina del desarrollador. Por supuesto, si cambian las redes, tengo que ejecutarlo de nuevo. ¿Hay alguna forma de permitir todas las conexiones remotas como las que he experimentado con SQL Server o es una mala idea por alguna razón? Todavía tenemos nombre de usuario y contraseña ... obviamente estoy un poco confundido.
Además: esta es una base de datos de desarrollo y solo es accesible desde nuestra red interna. Entiendo por qué es una mala idea dar a todos el acceso a una base de datos de producción.
Instale y configure 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, instale mysql usando:
sudo apt-get install mysql-server
Solo tiene lo 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
Inicie sesión en DB desde el servidor usando
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 abierto:
sudo ufw allow 3306
Reiniciar mysql
sudo service mysql restart
Como lo señaló Ryan anteriormente, el comando que necesita es
GRANT ALL ON *.* to user@''%'' IDENTIFIED BY ''password'';
Sin embargo, tenga en cuenta que la documentación indica que para que esto funcione, se debe crear otra cuenta de usuario de localhost
para el mismo usuario; de lo contrario, la cuenta anónima creada automáticamente por mysql_install_db
tendrá prioridad porque tiene una columna de host más específica.
En otras palabras; para que el user
pueda conectarse desde cualquier servidor; 2 cuentas deben crearse de la siguiente manera:
GRANT ALL ON *.* to user@localhost IDENTIFIED BY ''password'';
GRANT ALL ON *.* to user@''%'' IDENTIFIED BY ''password'';
Lea la documentación completa here.
Y aquí está la pieza relevante para referencia:
Después de conectarse al servidor como root, puede agregar nuevas cuentas. Las siguientes declaraciones usan GRANT para configurar cuatro cuentas nuevas:
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 se puede usar 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 conectarse desde cualquier lugar como Monty . Sin la cuenta de localhost, la cuenta de usuario anónimo para localhost creada por mysql_install_db tendrá prioridad cuando monty se conecte desde el host local. Como resultado, Monty sería tratado como un usuario anónimo. El motivo de esto es que la cuenta de usuario anónimo tiene un valor de columna de Host más específico que la cuenta ''monty'' @ ''%'' y, por lo tanto, aparece antes en el orden de clasificación de la tabla de usuarios. (La clasificación de la tabla de usuarios se describe en la Sección 6.2.4, “Control de acceso, Etapa 1: Verificación de la conexión”.)
Eso me parece una tontería a menos que esté malinterpretando esto.
Puede deshabilitar toda la seguridad editando /etc/my.cnf:
[mysqld]
skip-grant-tables
También debe deshabilitar la siguiente línea en el archivo de configuración: bind-address = 127.0.0.1
GRANT ALL ON *.* to user@''%'' IDENTIFIED BY ''password'';
Permitirá a un usuario específico iniciar sesión desde cualquier lugar.
Es malo porque elimina algún control de seguridad, es decir, si una cuenta está comprometida.
mysql> CREATE USER ''monty''@''192.168.%.%'' IDENTIFIED BY ''some_pass'';
mysql> GRANT ALL PRIVILEGES ON *.* TO ''monty''@''192.168.%.%''