mysql grant命令的含义是什么?

时间:2016-09-08 20:48:19

标签: mysql debian development-environment

我正在创建自己的PHP开发环境,我正在设置mysql。

我需要向root用户授予我使用的所有权限:

GRANT ALL ON *.* TO 'root'@'%';

为什么使用'root'@'%'?

我知道这些是用户和主机,但在这种情况下,我在开发环境中为什么我必须放置主机?

对于生产服务器,我理解它只授予指定主机托管的数据库,对吗?

感谢。

1 个答案:

答案 0 :(得分:1)

'%'是一个通配符后备。登录尝试尝试最具体,然后移向通配符(向更一般的方向移动),直到找到用户/主机组合帐户(如果要进行身份验证)。如果找不到这样的帐户,则登录失败。

所以当你有'root'@'localhost'(称之为acct或用户1)时,当你坐在localhost时,这一切都很好。但是,如果您从其他客户端添加,请说“192.168.10.103'”,则您不再是“本地主机”。你现在需要一个明确的' root' @' 192.168.10.103' (如果你愿意,可以使用用户或帐户),或者为了理智我们使用'%'为通配符摇摆。为什么,因为你不想让你的mysql.user乱丢所有的排列。

可以看到您拥有的用户
select user,host from mysql.user;

根用

有3个用户并不罕见
'root'@'localhost'
'root'@'127.0.0.1'
'root'@'%'

给予他们所有相同的权利。上面的第三个自然是一个安全风险。那是因为'%'意味着来自任何主机

这就是为什么' root' @' localhost'建议您是系统中唯一的root用户。您可以通过坐在该框中来获得root权限,或者使用带有安全连接的ssh来成为 localhost ,如果愿意的话。

你需要明白,这完全取决于安全性,无论好坏,MySQL选择实现用户的方式。用户是用户名,加上主机名进入。主机名可以是IP地址,也可以是casper.comcastbusiness.net等DNS主机名。当MySQL收到连接请求时,它会从最具体的特征向“'%'直到它能够或不能验证请求。

作为一个用例,我有一个服务器,我想以root身份进行身份验证,但出于安全原因, not 在系统中有一个'root'@'%'用户。所以我明确创建了像'root'@'casper.comcastbusiness.net'这样的用户。另一层当然是防火墙,但这是一个单独的问题。但要轻轻触摸它,AWS ec2有一个安全组区域,只有某些IP地址能够连接到端口3306.所以防火墙是另一层,我所说的是整个事情是关于保护您的服务器。

管理它是一种痛苦。但它是什么,我们必须忍受它。