创buildMySQL用户时使用%作为主机
我的MySQL数据库需要两个用户:appuser和支持。
其中一位应用程序开发人员坚持说,我为这些用户创build了四个帐户:
appuser@'%' appuser@'localhost' support@'%' support@'localhost'
对于我的生活,我无法弄清楚为什么他认为我们需要这个。 不会使用通配符作为主机来处理“本地主机”?
有任何想法吗?
(在这里使用MySQL 5.5)
百分号表示所有的IP,所以本地主机是多余的…有没有需要本地主机的第二个logging。
编辑
实际上,'localhost'在mysql中是特殊的,它意味着通过一个unix套接字(或者我相信windows上的命名pipe道)而不是一个TCP / IP套接字的连接。 使用%作为主机不包含'localhost'
正如@nos在目前接受的这个问题的答案的评论中指出的那样,接受的答案是不正确的。
是的,当通过套接字连接而不是标准TCP / IP连接进行连接时,用户帐户主机使用%
和localhost
是有区别的。
主机值%
不包括套接字的localhost
,因此如果要使用该方法进行连接,则必须指定主机值。
如果要从本地主机连接到user@'%'
,请使用mysql -h192.168.0.1 -uuser -p
。
要提供一个稍微不同的答案到目前为止提供的。
如果你在用户表''@'localhost'
有一行匿名用户,那么这将被视为比通配符'user'@'%'
更具体。 这就是为什么还需要提供'user'@'localhost'
。
您可以在本页底部看到更详细的解释。
百分号表示:任何主机,包括远程和本地连接。
本地主机只允许本地连接。
(所以要开始,如果你不需要远程连接到你的数据库,你可以立即摆脱appuser @'%'用户)
所以,是的,它们是重叠的,但…
…有一个设置这两种types的帐户的原因,这是在MySQL文档中解释: http : //dev.mysql.com/doc/refman/5.7/en/adding-users.html 。
如果你的本地主机有一个匿名用户,你可以看到:
select Host from mysql.user where User='' and Host='localhost';
如果你只是创build了用户appuser @'%'(而不是appuser @'localhost'),那么当appuser mysql用户从本地主机连接时, 使用匿名用户帐户 (它优先于你的appuser @ '%'用户)。
这个问题的解决方法是(可以猜测)创buildappuser @'localhost'(更具体的说,是本地主机匿名用户,如果你的appuser从本地主机连接的话,将会使用这个用户)。