为啥在我第一次授予用户权限时会创建“GRANT USAGE”?

Posted

技术标签:

【中文标题】为啥在我第一次授予用户权限时会创建“GRANT USAGE”?【英文标题】: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

【问题讨论】:

你能告诉我们你运行的赠款吗 【参考方案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......

【讨论】:

以上是关于为啥在我第一次授予用户权限时会创建“GRANT USAGE”?的主要内容,如果未能解决你的问题,请参考以下文章

为用户授予在 postgresql 中创建的任何新表的权限

如何将现有用户的权限授予我在 Oracle 中创建的用户?谢谢

我们如何授予用户在 phpmyadmin(cPanel) 中创建数据库的权限?

在我的 PostGres 表上授予所有权限,但在尝试插入/选择时仍然收到“权限被拒绝”错误

谷歌应用程序脚本在第一次运行时授予用户权限访问电子表格上的服务,而无需打开脚本编辑器

为啥分配为 None 时会创建副本?