MySQL Grant Privilege

17 Mar 2025 | 4 分钟阅读

MySQL 有一个功能,为数据库管理员和用户提供了许多控制选项。我们已经学习了如何在 MySQL 服务器中使用 CREATE USER 语句创建新用户。现在,我们将学习如何授予用户帐户权限。MySQL 提供了 GRANT 语句来为用户帐户授予访问权限。

GRANT 语句

GRANT 语句允许系统管理员为 MySQL 用户帐户**_分配权限和角色_**,以便他们可以在需要时在数据库上使用分配的权限。

语法

以下是使用 GRANT 语句的基本语法

参数解释

在上述语法中,我们可以有以下参数

参数名称描述
privilege_name(s)它指定用户帐户的访问权限或授予权限。如果我们要授予多个权限,则使用逗号运算符将其分隔开。
object它确定授予访问权限的权限级别。这意味着授予表权限;那么对象应该是表的名称。
user_account_name它确定将授予访问权限的用户的帐户名称。

权限级别

MySQL 支持以下权限级别

权限级别语法描述
全球GRANT ALL
ON *.*
TO john@localhost;
它适用于 MySQL 服务器上的所有数据库。我们需要使用 *.* 语法来应用全局权限。在这里,用户可以查询当前服务器的所有数据库和表中的数据。
数据库GRANT ALL
ON mydb.*
TO john@localhost;
它适用于当前数据库中的所有对象。我们需要使用 db_name.* 语法来应用此权限。在这里,用户可以查询给定数据库中所有表中的数据。
GRANT DELETE
ON mydb.employees
TO john@localhsot;
它适用于指定表中的所有列。我们需要使用 db_name.table_name 语法来分配此权限。在这里,用户可以查询指定数据库的给定表中的数据。
GRANT SELECT (col1), INSERT (col1, col2), UPDATE (col2)
ON mydb.mytable
TO john@localhost;
它适用于表的单个列。在这里,我们必须为每个权限指定用括号括起来的列名。用户可以查询一列,在两列中插入值,并且只更新给定表中的一列。
存储例程GRANT EXECUTE
ON PROCEDURE mydb.myprocedure
TO john@localhost;
它适用于存储例程(过程和函数)。它包含 CREATE ROUTINE、ALTER ROUTINE、EXECUTE 和 GRANT OPTION 权限。在这里,用户可以在当前数据库中执行存储过程。
ProxyGRANT PROXY
ON root
TO peter@localhost;
它使一个用户可以充当其他用户的代理。

GRANT 语句示例

让我们通过示例了解 GRANT 权限。首先,我们需要使用以下语句创建一个名为 "john@localhost" 的新用户

接下来,执行 SHOW GRANT 语句,使用以下查询检查分配给 john@localhost 的权限

它将给出以下输出。在这里,USAGE 表示用户可以登录到数据库,但没有任何权限。

MySQL Grant Privilege

如果我们要将所有权限分配给当前服务器中所有数据库的 john@localhost,请执行以下语句

再次执行 SHOW GRANT 语句以验证权限。成功执行后,我们将获得以下输出。在这里,所有权限都已分配给当前服务器中所有数据库的 john@localhost。

MySQL Grant Privilege

存储例程示例

在这里,授予权限适用于**过程和函数**,用户可以在当前 MySQL 数据库中执行存储过程。EXECUTE 权限提供了执行函数和过程的能力。

让我们通过示例来理解它。假设我们有一个函数 **calculatesalary**,并希望将 **EXECUTE** 权限授予用户 john,运行以下查询

如果需要向所有用户提供 EXECUTE 权限,我们必须运行以下命令

我们可以从以下列表中选择可以应用权限的访问权限。

  1. SELECT: 它使我们能够查看指定表中的结果集。
  2. INSERT: 它使我们能够在给定表中添加记录。
  3. DELETE: 它使我们能够从表中删除行。
  4. CREATE: 它使我们能够创建表/模式。
  5. ALTER: 它使我们能够修改表/模式。
  6. UPDATE: 它使我们能够修改表。
  7. DROP: 它使我们能够删除表。
  8. INDEX: 它使我们能够在表上创建索引。
  9. ALL: 它使我们能够授予除 GRANT 权限之外的所有权限。
  10. GRANT: 它使我们能够更改或添加访问权限。

下一主题MySQL 撤销权限