一尘不染

允许所有远程连接,MySQL

mysql

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

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

address开发人员机器的IP地址在哪里。当然,如果他们更改网络,则必须再次执行。有没有一种方法可以允许所有远程连接(如我在SQL
Server中所经历的那样),或者由于某种原因这是一个坏主意吗?我们仍然有用户名和密码。.显然我有些困惑。

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


阅读 419

收藏
2020-05-17

共1个答案

一尘不染

正如上面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';

此处阅读完整的文档

这是相关的参考资料:

以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” @“%”帐户将“%”通配符用于主机部分,因此可用于从任何主机进行连接。

必须同时拥有两个帐户,才能作为帐户从任何地方连接
。如果没有localhost帐户,当monty从本地主机连接时,由mysql_install_db创建的localhost匿名用户帐户将具有优先权。结果,monty将被视为匿名用户。原因是匿名用户帐户比“
monty”
@“%”帐户具有更特定的“主机”列值,因此在用户表排序顺序中排在较早的位置。(在第6.2.4节“访问控制,阶段1:连接验证”中讨论了用户表排序。)

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

2020-05-17