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

时间:2010-01-24 06:54:09

标签: mysql database privileges grant

当我注意到这一点时,我是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}}

3 个答案:

答案 0 :(得分:117)

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

  

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

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

IDENTIFIED BY子句表示为该用户设置了密码。我们如何知道用户是谁?他们通过为其帐户发送正确的密码来识别

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

答案 1 :(得分:7)

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

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

当您使用GRANT 授予权限时,将在其上添加新权限。

答案 2 :(得分:3)

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