mysql grant 命令是什么意思?

What does it mean on mysql grant command?

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

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

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

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

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

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

谢谢。

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

因此,当您拥有 'root'@'localhost'(称其为帐户或用户 1)时,当您坐在本地主机上时,一切都很好。但是当你从不同的客户端连接时,比如'192.168.10.103',你不再是'localhost'。您现在需要一个明确的 'root'@'192.168.10.103'(用户或帐户,如果您愿意的话),或者为了理智,我们使用 '%' 来选择通配符。为什么,因为你不可能在 mysql.user 中乱扔所有排列。

可以看到您有哪些用户

select user,host from mysql.user;

root有3个用户的情况并不少见

'root'@'localhost'
'root'@'127.0.0.1'
'root'@'%'

赋予他们所有相同的权利。上面的第三个自然是安全风险。之所以如此,是因为“%”意味着 来自任何主机 任何地方。

这就是为什么 'root'@'localhost' 被推荐为系统中唯一的根用户。您可以通过坐在那个盒子上获得 root,或者使用带有安全连接的 ssh 成为 localhost,如果您愿意的话。

您需要了解这一切都与安全有关,而且,无论好坏,MySQL 选择实现用户的方式。用户是用户名加上主机名 形式出现。主机名可以是 IP 地址或 DNS 主机名,如 casper.comcastbusiness.net。当 MySQL 收到连接请求时,它会从最具体到 '%' 向上冒泡,直到它可以或不能验证请求。

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

管理它很痛苦。但这就是事实,我们必须忍受它。