【问题标题】:Why is a "GRANT USAGE" created the first time I grant a user privileges?为什么在我第一次授予用户权限时会创建“GRANT USAGE”?
【发布时间】:2011-01-08 17:35:55
【问题描述】:

当我注意到这一点时,我是 DBMS 管理员方面的新手,今晚正在设置一个新数据库(使用 MySQL)。第一次授予用户权限后,会创建另一个授权,如下所示

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

文档说USAGE 特权意味着“没有特权”,所以我推断这是分层授予的工作,也许用户必须对所有数据库都具有某种特权,所以这是一个包罗万象的功能?

我也不明白为什么我创建的授权中没有IDENTIFIED BY 子句(主要是因为我不明白IDENTIFIED BY 子句的用途是什么)。

编辑:很抱歉最初没有说明这一点,赠款是

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user

【问题讨论】:

  • 你能告诉我们你运行的赠款吗

标签: mysql database privileges grant


【解决方案1】:

正如您所说,在 MySQL 中 USAGE 是“无特权”的同义词。来自MySQL Reference Manual

USAGE 特权说明符代表“无特权”。它在全局级别与 GRANT 一起用于修改帐户属性,例如资源限制或 SSL 特征,而不影响现有帐户权限。

USAGE 是一种告诉 MySQL 帐户存在而不授予该帐户任何实际权限的方法。他们只有使用 MySQL 服务器的权限,因此是USAGE。它对应于`mysql`.`user` 表中没有设置权限的行。

IDENTIFIED BY 子句表示为该用户设置了密码。我们如何知道用户是他们所说的那个人?他们通过发送正确的帐户密码识别自己。

用户的密码是不与特定数据库或表绑定的全局级别帐户属性之一。它也存在于`mysql`.`user` 表中。如果用户没有任何其他权限ON *.*,他们将被授予USAGE ON *.*,并且他们的密码哈希显示在那里。这通常是CREATE USER 语句的副作用。以这种方式创建用户时,他们最初没有权限,因此仅授予他们USAGE

【讨论】:

  • 我认为这是因为他们被允许进行身份验证。如果您尝试使用错误的用户或/和密码,则无法进行身份验证。具有 USAGE 权限的用户可以运行某些 SQL 命令,例如“select 1+1”和“show processlist”。
【解决方案2】:

我试图找到GRANT USAGE on *.* TO 的含义并在这里找到。我可以澄清一下,当您使用以下命令 (CREATE) 创建 用户时,将授予 GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

当您使用GRANT授予权限时,新的权限将被添加到它之上。

【讨论】:

  • “在它之上”是什么意思?
  • 它的意思是“另外”。如“除了GRANT USAGE 已经授予的特权之外,还添加了新特权”。
【解决方案3】:

另外mysql密码在不使用IDENTIFIED BY子句时,可能为空值,如果非空,则可能被加密。但是是的,USAGE 用于通过授予简单的资源限制器(例如 MAX_QUERIES_PER_HOUR)来修改帐户,这也可以通过以下方式指定 使用 WITH 子句,结合GRANT USAGE(未添加权限)或GRANT ALL,您还可以在全局级别、数据库级别、表级别等指定GRANT USAGE......

【讨论】:

    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多