MySQL Grant授权
MySQL具有一项功能,可为数据库的管理员和用户提供许多控制选项。我们已经学习了如何在MySQL服务器中使用 CREATE USER 语句创建新用户。现在,我们将学习对用户帐户的授予Grant。 MySQL提供GRANT语句来授予对用户帐户的访问权限。
GRANT语句
grant语句使系统管理员可以
分配Grant和角色 添加到 MySQL 用户帐户,以便他们可以随时使用对数据库分配的权限
语法
以下是使用GRANT语句的基本语法:
GRANT privilege_name(s)
ON object
TO user_account_name;
参数说明
在以上语法中,我们可以具有以下参数:
参数名称 |
说明 |
privilege_name(s) |
它指定对用户帐户的访问权限或授予Grant。如果我们要赋予多个Grant,请使用逗号分隔。 |
object |
它确定授予访问权限的Grant级别。这意味着向表授予Grant;那么该对象应该是表的名称。 |
user_account_name |
它确定要授予访问权限的用户的帐户名。 |
Grant级别
MySQL支持以下Grant级别:
级别 |
语法 |
说明 |
Global |
GRANT ALL ON *.* TO john@localhost; |
它适用于MySQL服务器上的所有数据库。我们需要使用*。*语法来应用全局Grant。在这里,用户可以从当前服务器的所有数据库和表中查询数据。 |
Database |
GRANT ALL ON mydb.* TO john@localhost; |
它适用于当前数据库中的所有对象。我们需要使用db_name。*语法来应用此Grant。在这里,用户可以从给定数据库中的所有表中查询数据。 |
Table |
GRANT DELETE ON mydb.employees TO john@localhsot; |
它适用于指定表中的所有列。我们需要使用db_name.table_name语法来分配此Grant。在这里,用户可以从指定数据库的给定表中查询数据。 |
Column |
GRANT SELECT (col1), INSERT (col1, col2), UPDATE (col2) ON mydb.mytable TO john@localhost; |
它适用于表的单个列。在这里,我们必须为每个Grant指定用括号括起来的列名称。用户可以选择一列,在两列中插入值,并且仅更新给定表中的一列。 |
Stored Routine |
GRANT EXECUTE ON PROCEDURE mydb.myprocedure TO john@localhost; |
它适用于存储的例程(过程和函数)。它包含CREATE ROUTINE,ALTER ROUTINE,EXECUTE和GRANT OPTION Grant。用户可以在此处执行当前数据库中的存储过程。 |
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;
它将给出以下输出。在这里,
使用表示用户可以登录数据库但没有任何Grant。
如果要
将当前服务器中所有数据库的所有Grant分配给john @ localhost,请执行以下语句:
mysql> GRANT ALL ON mystudentdb.* TO john@localhost;
再次,执行SHOW GRANT语句以验证Grant。成功执行后,我们将获得以下输出。这里,所有Grant都分配给当前服务器中所有数据库的john @ localhost。
存储的例程示例
在这里,授予Grant应用于
过程和函数,用户可以在其中执行当前MySQL数据库中的存储过程。 EXECUTEGrant提供执行功能和过程的能力。
让我们通过示例了解它。假设我们有一个函数
calculatesalary ,并想向用户john授予
EXECUTE Grant,请运行以下查询:
mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO john@localhost;
如果需要向所有用户提供EXECUTE Grant,我们必须运行以下命令:
mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO *@localhost;
我们可以从下面的列表中选择可以应用Grant的访问权限。
SELECT: 它使我们能够从指定的表中查看结果集。
INSERT: 它使我们能够在给定表中添加记录。
DELETE: 它使我们能够从表中删除行。
CREATE: 它使我们能够创建表/方案。
ALTER: 它使我们能够修改表/方案。
UPDATE: 它使我们能够修改表。
DROP: 它使我们能够删除表。
INDEX: 它使我们能够在表上创建索引。
ALL: 它使我们能够授予除GRANT 特权以外的所有权限。
GRANT: 它使我们能够更改或添加访问权限。