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


100

我是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

可以请你告诉我们,你已经运行批
Pentium10

Answers:


143

如您所说,在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 2015年

11

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

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

当您通过授予特权时GRANT,新的特权将会添加在其之上。


3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.