为啥在我第一次授予用户权限时会创建“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”?的主要内容,如果未能解决你的问题,请参考以下文章
如何将现有用户的权限授予我在 Oracle 中创建的用户?谢谢
我们如何授予用户在 phpmyadmin(cPanel) 中创建数据库的权限?
在我的 PostGres 表上授予所有权限,但在尝试插入/选择时仍然收到“权限被拒绝”错误