允许所有远程连接,MySQL

我一直在使用SQL Server,现在正在使用MySQL作为项目。 使用SQL Server,如果我们的开发人员知道主机,用户名,密码,就可以连接到本地机器上的远程数据库。 但是使用MySQL,为了让开发人员能够从本地机器访问,我一直不得不login到MySQL并执行:

GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; flush privileges; 

address是开发者机器的IP地址。 当然,如果他们改变networking,我必须再次执行它。 有没有办法让所有的远程连接,如我曾经与SQL Server的经验,或者这是一个坏主意,出于某种原因? 我们有用户名和密码仍然..我显然有点困惑。

另外:这是一个开发数据库,​​只能从我们的内部networking访问。 我明白为什么给每个人访问生产数据库是一个坏主意。

正如上面Ryan所指出的,你需要的命令是

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

但是,请注意,文档指出为了使其工作,必须为同一用户创buildlocalhost另一个用户帐户; 否则,由mysql_install_db自动创build的匿名帐户优先,因为它有一个更具体的主机列。

换一种说法; 为了使用户能够从任何服务器连接; 需要创build2个账户如下:

 GRANT ALL ON *.* to user@localhost IDENTIFIED BY 'password'; GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

在这里阅读完整的文档。

以下是相关的参考资料:

以root身份连接到服务器后,您可以添加新帐户。 以下声明使用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'; 

这些语句创build的帐户具有以下属性:

其中两个帐户的用户名为monty,密码为some_pass。 这两个帐户都是具有完全权限的超级用户帐户。 只有从本地主机连接时才能使用'monty'@'localhost'帐户。 'monty'@'%'帐户使用主机部分的'%'通配符,所以它可以用来从任何主机连接。

有必要有两个帐户monty能够连接从任何地方monty 。 如果没有本地主机帐户,monty从本地主机连接时,由mysql_install_db创build的localhost的匿名用户帐户将优先。 因此,monty将被视为匿名用户。 原因是匿名用户帐户比'monty'@'%'帐户具有更具体的主机列值,因此在用户表sorting顺序中更早。 (用户表格sorting在第6.2.4节“访问控制,第1阶段:连接validation”中讨论)

除非我误解这个,否则这对我来说似乎很愚蠢。

您可以通过编辑/etc/my.cnf来禁用所有的安全性:

 [mysqld] skip-grant-tables 
 GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password'; 

将允许特定的用户从任何地方login。

这很糟糕,因为它消除了一些安全控制,即如果一个帐户被盗用。

还需要在configuration文件中禁用以下行:bind-address = 127.0.0.1

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

安装和设置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 

从服务器login到DB使用

mysql -u root -p

使用下面的语句创build数据库用户

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

打开防火墙:

 sudo ufw allow 3306 

重新启动mysql

 sudo service mysql restart