我一直在使用SQL Server,现在正在将MySQL用于一个项目。使用SQL Server,我们的开发人员可以在知道主机,用户名和密码的情况下连接到本地计算机上的远程数据库。但是,使用MySQL,要使开发人员能够从其本地计算机访问,我一直必须登录MySQL并执行:
GRANT ALL ON *.* to user@address IDENTIFIED BY 'password'; flush privileges;
address开发人员机器的IP地址在哪里。当然,如果他们更改网络,则必须再次执行。有没有一种方法可以允许所有远程连接(如我在SQL Server中所经历的那样),或者由于某种原因这是一个坏主意吗?我们仍然有用户名和密码。.显然我有些困惑。
address
另外:这是一个开发数据库,只能从我们的内部网络访问。我知道为什么让所有人都可以访问生产数据库是个坏主意。
正如上面Ryan指出的,您需要的命令是
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';
但是,请注意,文档指出,要使此功能正常运行,localhost必须为同一用户创建另一个用户帐户。否则,由自动创建的匿名帐户mysql_install_db将具有优先权,因为它具有更特定的主机列。
localhost
mysql_install_db
换一种说法; 为了使用户user能够从任何服务器进行连接;需要创建2个帐户,如下所示:
user
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:连接验证”中讨论了用户表排序。)
这些语句创建的帐户具有以下属性:
其中两个帐户的用户名是monty,密码是some_pass。这两个帐户都是具有完全权限执行任何操作的超级用户帐户。仅在从本地主机连接时才能使用“ monty” @“ localhost”帐户。“ monty” @“%”帐户将“%”通配符用于主机部分,因此可用于从任何主机进行连接。
必须同时拥有两个帐户,才能作为帐户从任何地方连接 。如果没有localhost帐户,当monty从本地主机连接时,由mysql_install_db创建的localhost匿名用户帐户将具有优先权。结果,monty将被视为匿名用户。原因是匿名用户帐户比“ monty” @“%”帐户具有更特定的“主机”列值,因此在用户表排序顺序中排在较早的位置。(在第6.2.4节“访问控制,阶段1:连接验证”中讨论了用户表排序。)
除非我误解,否则这对我来说似乎很愚蠢。