MySQL授予权限
MySQL提供了许多控制选项,以便管理员和用户对数据库进行管理。我们已经学习了如何使用MySQL服务器中的CREATE USER语句创建新用户。现在,我们将学习为用户账户授予权限。MySQL提供了GRANT语句来赋予用户账户访问权限。
GRANT语句
GRANT语句使系统管理员能够将特权和角色分配给MySQL用户账户,以便他们在需要时可以使用分配的权限访问数据库。
语法
使用GRANT语句的基本语法如下:
GRANT privilege_name(s)
ON object
TO user_account_name;
参数解释
在上面的语法中,我们可以有以下参数:
参数名称 | 描述 |
---|---|
privilege_name(s) | 它指定了对用户账户的访问权限或授权权限。如果我们想要给予多个权限,则使用逗号运算符来分隔它们。 |
object | 它确定被授予访问权限的权限级别。这意味着给予表的权限,那么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权限。在这里,用户可以在当前数据库中执行存储过程。 |
代理 | 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;
它将给出以下输出。在这里, 使用 意味着用户可以登录到数据库,但没有任何特权。
如果我们想要给当前服务器上的所有数据库分配给john@localhost的所有权限,请执行以下语句: assign all privileges
mysql> GRANT ALL ON mystudentdb.* TO john@localhost;
再次执行SHOW GRANT语句来验证权限。成功执行后,我们将得到以下输出。这里将所有权限分配给当前服务器中的所有数据库的john@localhost。
存储过程示例
在这里,授予权限适用于可以在当前MySQL数据库中执行存储过程的 过程和函数 。 EXECUTE权限提供执行函数和过程的能力。
让我们通过以下示例来理解。假设我们有一个名为 calculatesalary 的函数,并且想要授予用户john EXECUTE 权限,运行以下查询:
mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO john@localhost;
如果需要为所有用户提供”EXECUTE”权限,我们必须运行以下命令:
mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO *@localhost;
我们可以从下面的列表中选择访问权限,以便应用特定的权限。
- SELECT: 它使我们能够查看指定表的结果集。
- INSERT: 它使我们能够向给定的表中添加记录。
- DELETE: 它使我们能够从表中删除行。
- CREATE: 它使我们能够创建表/模式。
- ALTER: 它使我们能够修改表/模式。
- UPDATE: 它使我们能够修改表。
- DROP: 它使我们能够删除表。
- INDEX: 它使我们能够在表上创建索引。
- ALL: 它使我们能够授予除了GRANT权限之外的所有权限。
- GRANT: 它使我们能够更改或添加访问权限。