第一次授予用户权限时为什么会创建一个“GRANT USAGE”?

126

我是数据库管理系统的新手,今晚在设置一个新的数据库(使用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

请问您能告诉我们您运行的授权吗? - Pentium10
3个回答

179
正如你所说,在MySQL中,USAGE和“没有权限”是同义词。根据MySQL参考手册的说法:

USAGE权限标识符表示“没有权限”。它在全局级别上与GRANT一起使用,用于修改帐户属性,例如资源限制或SSL特性,而不影响现有帐户特权。

USAGE是告诉MySQL一个帐户存在但并不赋予该帐户任何真正的特权的方法。他们仅有使用MySQL服务器的权限,因此称为USAGE。这对应于在没有设置任何特权的情况下在`mysql`.`user`表中的一行。 IDENTIFIED BY从句指示为该用户设置了密码。我们如何知道用户就是他们所说的那个人?他们通过发送其帐户的正确密码来进行身份验证。
用户的密码是那些不与特定数据库或表绑定的全局级别帐户属性之一。它也存储在`mysql`.`user`表中。如果用户没有任何其他权限ON *.*,则会授予他们USAGE ON *.*,并显示他们的密码哈希值。这通常是CREATE USER语句的副作用。当以这种方式创建用户时,他们最初没有特权,因此仅授予了USAGE

10
我认为这是因为它们被允许进行身份验证。如果您尝试使用错误的用户名或密码,您将无法进行身份验证。具有USAGE权限的用户可以运行某些SQL命令,如'select 1 + 1'和'show processlist'。 - Mircea Vutcovici

12

我试图找到GRANT USAGE on *.* TO的意思,然后在这里找到了答案。我可以澄清,当你使用以下命令(CREATE)创建用户时,将授予GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password权限:

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

当你使用GRANT授予权限时,新的权限将会被添加在之前已有的权限之上。


什么意思是“on top of it”? - Čamo
它的意思是“此外”。例如,“除了已经通过GRANT USAGE授予的权限之外,还添加了新的权限。” - umläute

3
另外,如果不使用“IDENTIFIED BY”子句,MySQL密码可以是空值,如果非空,则可以加密。但是,“USAGE”用于通过授予简单的资源限制器(例如“MAX_QUERIES_PER_HOUR”)修改帐户,这也可以通过与“GRANT USAGE”(不添加任何特权)或“GRANT ALL”一起使用WITH子句指定。您还可以在全局级别、数据库级别、表级别等处指定“GRANT USAGE”...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接