程序员社区

MySQL系列教程 --- 51、MySQL 授予权限、授权声明

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

授权声明

grant 语句使系统管理员能够为MySQL用户帐户分配权限和角色\,以便他们可以在需要时使用分配的数据库权限。

句法

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

GRANT privilege_name(s)   
ON object   
TO user_account_name;  

参数说明

在上面的语法中,我们可以有以下参数:

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

权限级别

MySQL 支持以下权限级别:

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

GRANT 语句示例

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

mysql> CREATE USER john@localhost IDENTIFIED BY 'jtp12345';  

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

mysql> SHOW GRANTS FOR john@localhost;  

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

file

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

mysql> GRANT ALL ON mystudentdb.* TO john@localhost;  

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

file

存储例程示例

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

让我们通过例子来理解它。假设我们有一个函数calculatesalary并且想要向用户 john授予EXECUTE权限,请运行以下查询:

mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO john@localhost;  

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

mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO *@localhost;  

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

  1. SELECT:它使我们能够从指定的表中查看结果集。
  2. INSERT:它使我们能够在给定的表中添加记录。
  3. DELETE:它使我们能够从表中删除行。
  4. CREATE:它使我们能够创建表/模式。
  5. ALTER:它使我们能够修改表/模式。
  6. UPDATE:它使我们能够修改表。
  7. DROP:它使我们能够删除一个表。
  8. INDEX:它使我们能够在表上创建索引。
  9. ALL:它使我们能够授予除 GRANT 特权之外的所有权限。
  10. GRANT:它使我们能够更改或添加访问权限。
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 51、MySQL 授予权限、授权声明

一个分享Java & Python知识的社区