允许所有远程连接,MySQL

时间:2012-04-19 20:12:48

标签: mysql

我一直在使用SQL Server,现在正在使用MySQL进行项目。使用SQL Server,如果他们知道主机,用户名和密码,我们的开发人员可以连接到本地计算机上的远程数据库。但是,使用MySQL,要让开发人员从本地计算机访问,我必须登录MySQL并执行:

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

其中address是开发人员计算机的IP地址。当然,如果他们改变网络,我必须再次执行它。有没有办法允许所有远程连接,就像我在SQL Server中遇到的那样,或者出于某种原因这是个坏主意?我们还有用户名和密码..我显然有点困惑。

另外:这是一个开发数据库,​​只能从我们的内部网络访问。我理解为什么让每个人都能访问生产数据库是个坏主意。

7 个答案:

答案 0 :(得分:135)

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

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

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

换句话说;以便用户user能够从任何服务器连接;需要创建2个帐户,如下所示:

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

阅读完整文档here.

以下是相关的参考资料:

  

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

这些陈述创建的帐户具有以下内容   属性:

     

其中两个帐户的用户名为monty,密码为   some_pass。两个帐户都是具有完全权限的超级用户帐户   做任何事。 'monty'@'localhost'帐户只能在以下情况下使用   从本地主机连接。 'monty'@'%'帐号使用'%'   主机部分的通配符,因此可以用于从任何连接   主机。

     

有两个帐户可以连接monty   从任何地方作为monty 。没有localhost帐户,   由[创建]创建的localhost的匿名用户帐户   当monty连接时,mysql_install_db优先   当地主持人。因此,monty将被视为匿名用户。   原因是匿名用户帐户有更多   特定主机列值比'monty'@'%'帐户因此而来   早期的用户表排序顺序。 (讨论用户表排序   在第6.2.4节“访问控制,第1阶段:连接验证”中。)

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

答案 1 :(得分:21)

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

[mysqld]
skip-grant-tables

答案 2 :(得分:11)

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

允许特定用户从任何地方登录。

它很糟糕,因为它删除了一些安全控制,即如果帐户遭到入侵。

答案 3 :(得分:8)

  

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

也许您只需要:

第一步:

grant all privileges on *.* to 'user'@'IP' identified by 'password';

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

第二步:

sudo ufw allow 3306

第三步:

sudo service mysql restart