如何向 MySQL 用户授予权限?
我们需要向新创建的用户授予权限,因为新用户没有权限。我们可以使用 GRANT 语句向用户帐户授予权限。其语法如下 −
语法
GRANT permission,[privilege],.. ON permission_level TO user [IDENTIFIED BY password] [REQUIRE tsl_option] [WITH [GRANT_OPTION | resource_option]];
上述语法的解释如下 −
首先,在 GRANT 关键字后指定一个或多个权限。如果我们授予用户多个权限,则每个权限都用逗号分隔。
接下来,指定权限级别,以确定权限适用的级别。MySQL 支持全局 (*.*)、数据库 (database.*)、表 (database.table) 和列级别。如果我们使用列权限级别,则必须在每个权限后指定一个或一个逗号分隔的列列表。
然后,放置我们要授予权限的用户。如果用户已经存在,则 GRANT 语句会修改其权限。否则,GRANT 语句会创建一个新用户。可选子句 IDENTIFIED BY 允许我们为用户设置新密码。
之后,我们指定用户是否必须通过安全连接(如 SSL、X059 等)连接到数据库服务器。
最后,可选的 WITH GRANT OPTION 子句允许我们授予其他用户或从其他用户中删除我们拥有的权限。此外,我们可以使用 WITH 子句分配 MySQL 数据库服务器的资源,例如设置用户每小时可以使用的连接数或语句数。这在共享环境(如 MySQL 共享主机)中非常有用。
示例
在下面的示例中,我们创建了一个用户并授予其权限 −
mysql> use mysql Databasechanged mysql> create user abcd@localhostidentified by 'password123'; Query OK, 0 rows impacted (0.04 sec)
下面的查询将为我们提供新用户帐户 abcd@localhost 的权限。
mysql> SHOW GRANTS FOR abcd@localhost; +------------------------------------------+ | Grants for abcd@localhost | +------------------------------------------+ | GRANT USAGE ON *.* TO 'abcd'@'localhost' | +------------------------------------------+ 1 row in set (0.01 sec)
现在,要将所有权限授予 abcd@localhost 用户帐户,我们可以使用以下语句 −
mysql> GRANT ALL ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION; Query OK, 0 rows impacted (0.05 sec)
此处,ON *.* 子句表示所有数据库和数据库中的所有对象。WITH GRANT OPTION 允许 abcd@localhost 向其他用户授予权限。
现在,如果我们再次使用 SHOW GRANTS 语句,我们将看到 abcd@localhost 的权限已更新。
mysql> SHOW GRANTS FOR abcd@localhost; +---------------------------------------------------------------------+ | Grants for abcd@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 1 row in set (0.00 sec)