【问题标题】:What does it mean on mysql grant command?mysql grant 命令是什么意思?
【发布时间】:2016-09-08 20:48:18
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: mysql debian development-environment


    【解决方案1】:

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

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

    可以看到您拥有的用户

    select user,host from mysql.user;
    

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

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

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

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

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

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

    管理它是一种痛苦。但事实就是如此,我们必须忍受它。

    【讨论】:

    • 谢谢德鲁!我明白了。所以正确地做最好撤销'root'@'%'的授权,只把它交给'root'@'localhost',因为我只会从我的本地主机连接到我的sql。 :)
    猜你喜欢
    • 2013-07-06
    • 1970-01-01
    • 2016-05-08
    • 2012-09-06
    • 2018-04-17
    • 2012-05-22
    • 2012-05-10
    • 2013-11-27
    • 2021-05-17
    相关资源
    最近更新 更多