9.5.2 创建用户:GRANT命令

GRANT和REVOKE命令分别用来授予和取消MySQL用户的权限,这些权限分4个级别。它们分别是:

■全局

■数据库

■表

■列

稍后,我们将详细介绍如何应用每个权限。

GRANT命令用来创建用户并赋予他们权限。GRANT命令的常见形式是:


GRANT privileges[columns]

ON item

TO user_name[IDENTIFIED BY'password']

[REQUIRE ssl_options]

[WITH[GRANT OPTION|limit_options]]


方括号内的子句是可选的。在本语法中,出现了许多占位符。第一个占位符是privileges,应该是由逗号分开的一组权限。MySQL已经有一组已定义的权限。它们在下一节详细介绍。

占位符columns是可选的。可以用它对每一个列指定权限。也可以使用单列的名称或者用逗号分开的一组列的名称。

占位符item是新权限所应用于的数据库或表。可以将项目指定为.,而将权限应用于所有数据库。这叫做赋予全局权限。如果没有使用在何特定的数据库,也可以通过只指定完成赋予全局权限。更常见的是,以dbname.的形式指定数据库中所有的表,以dbname.tablename的形式指定单个表,或者通过指定tablename来指定特定的列。这些分别表示其他3个可以利用的权限:数据库、表、列。如果在输入命令的时候正在使用一个数据库,tablename本身将被解释成当前数据库中的一个表。

user_name应该是用户登录MySQL所使用的用户名。请注意,它不必与登录系统时所使用的用户名相同。MySQL中的user_name也可以包含一个主机名。可以用它来区分如laura(解释成laura@localhost)和laura@somewhere.com。这是非常有用的一项能力,因为来自不同域的用户经常可能使用同一个名字。这也提高了安全性能,因为可以指定用户从什么地方连接到本机,甚至可以指定他们在特定的地方可以访问哪些表和数据库。

password应该是用户登录时使用的密码。常见的密码选择规则在这里都适用。我们后面将更详细地讲述安全问题,但是密码应该不容易被猜出来。这意味着,密码不应该是一个字典单词或与用户名相同。理想的密码应该是大、小写字母和非字母的组合。

REQUIRE子句允许指定用户是否必须通过加密套接字连接,或者指定其他的SSL选项。关于SSL到MySQL连接的更多信息,请参阅MySQL手册。

WITH GRANT OPTION选项,如果指定,表示允许指定的用户向别人授予自己所拥有的权限。

我们也可以指定如下所示的WITH子句:


MAX_QUERIES_PER_HOUR n


或者


MAX_UPDATES_PER_HOUR n


或者


MAX_CONNECTIONS_PER_HOUR n


这些子句可以指定每一个用户每小时执行的查询、更新和连接的数量。在共享的系统上限制单个用户的负载时,这些子句是非常有用的。

权限存储在名为mysql的数据库中的5个系统表中。这些表分别是mysql.user、mysql.db、mysql.host、mysql.tables_priv和mysql.columns_priv。作为GRANT命令的替代,可以直接修改这些表。我们将在第12章中更详细讨论它们。