首页 > 编程笔记 > MySQL笔记 阅读:1

MySQL GRANT授权命令的用法(附带实例)

授权就是为某个用户授予权限。合理的授权可以保证 MySQL 数据库的安全。

MySQL 数据库使用 GRANT 语句为用户授予权限。授予的权限可以分为多个层级,包括:

权限层级 权限范围 存储位置 授予/撤销权限语句
全局级 适用于一个定服务器中的所有数据库 mysql.user 表 GRANT ALL ON *.*
REVOKE ALL ON *.*
数据库级 适用于一个给定数据库中的所有表 mysql.db 和 mysql.host 表 GRANT ALL ON db_name.*
REVOKE ALL ON db_name.*
表层级 适用于一个给定表中的所有列 mysql.tables_priv 表 GRANT ALL ON db_name.tbl_name
REVOKE ALL ON db_name.tbl_name
列层级 适用于一个给定表中的单一列 mysql.columns_priv 表 使用 REVOKE 语句时,必须指定与被授权列相同的列
子程序级 CREATE ROUTINE、ALTER ROUTINE、EXECUTE 权限适用于已存储的子程序 mysql.procs_priv 表 这些权限可以被授予为全局层级和数据库层级,除了 CREATE ROUTINE 外,这些权限可以被授予子程序层级

在 MySQL 中,必须是拥有 GRANT 权限的用户才能执行 GRANT 语句。

要使用 GRANT 或 REVOKE,必须拥有 GRANT OPTION 权限,并且必须用于正在授予或撤销的权限。GRANT 的语法如下:
GRANT priv_type [(columns)] [, priv_type [(columns)]] ...
ON [object_type]  table1, table2,…, tablen
TO user  [WITH GRANT OPTION]
object_type = TABLE  |  FUNCTION  |  PROCEDURE

priv_type 参数表示权限类型;
WITH 关键字后可以跟一个或多个 with_option 参数。这个参数有 5 个选项,意义如下:
【实例】创建一个新用户 grantUser。使用 GRANT 语句对用户 grantUser 赋予所有数据的查询、插入权限,并授于 GRANT 权限。GRANT 语句及其执行结果如下:
MySQL> CREATE USER 'grantUser'@'localhost' IDENTIFIED BY 'mypass';
MySQL> GRANT SELECT,INSERT ON *.* TO 'grantUser'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.03 sec)
结果显示执行成功。

使用 SELECT 语句查询用户 grantUser 的权限:
MySQL> SELECT Host,User,Select_priv,Insert_priv, Grant_priv FROM mysql.user where user='grantUser';
+-----------+------------+-------------+--------------+-------------+
| Host      | User       | Select_priv | Insert_priv  | Grant_priv  |
+-----------+------------+-------------+--------------+-------------+
| localhost | grantUser  | Y           | Y            | Y           |
+-----------+------------+-------------+--------------+-------------+
1 row in set (0.00 sec)
查询结果显示用户 grantUser 被创建成功,并被赋予 SELECT、INSERT 和 GRANT 权限,其相应字段值均为“Y”。

被授予 GRANT 权限的用户可以登录 MySQL 并创建其他用户账户,比如这里名称是 grantUser 的用户。

相关文章