Skip to main content

GRANT

赋予访问权限

使用权限

使用此GRANT语句,用户必须具有GRANT OPTION权限,并且具有所赋予的权限的访问权。

概述

#用户或角色权限赋予
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [ user_options ...]

#角色权限
GRANT role TO grantee [, grantee ... ]
[ WITH ADMIN OPTION ]

GRANT 的作用分为两个方面:

  1. GRANT 语句用于授权给用户或角色某些特定的权限(privilege)来访问数据库中的对象(object),如表、视图、存储过程等。
  2. GRANT 语句授权角色给用户,相比于直接赋予相应的权限给用户,授权角色给用户是一种更加灵活和高效的权限控制方式。

参数解释: priv_type:指授权的权限类型,如 SELECT、INSERT、UPDATE、DELETE 等。 column_list:可选参数,指授权的列名。 object_type:可选参数,指授权的对象类型,如 TABLE、VIEW、PROCEDURE 等。 priv_level:指授权的级别,可以是全局(GLOBAL)或某个数据库(DATABASE)或某个对象(TABLE、VIEW、PROCEDURE)。 user_specification:指被授权的用户或角色,可以是用户名、角色名或者 ALL(表示所有用户)。 user_options:可选参数,指授权时的一些选项,如 WITH GRANT OPTION(允许被授权的用户再将权限授权给其他用户)等。其方式与CREATE USER相同。 role:指要授权的角色名。 grantee:指被授权的用户或角色,可以是用户名、角色名或者 PUBLIC(表示所有用户)。 WITH ADMIN OPTION:可选参数,表示授权用户(grantee)可以将该角色授权给其他用户或角色,即具有管理权限。

具体用法示例

  • 假设要授权用户'lilly'@'%'对于 mono 数据库中的创建数据表的权限:
GRANT CREATE ON mono.* TO 'lilly'@'%';
Query OK, 0 rows affected (0.010 sec)
  • 假设要授权用户'lilly'@'%'可以SELECTINSERT访问表"employees"的"employee_id"和"phone_number"两列,则可以使用以下语句:
GRANT SELECT(employee_id,phone_number),INSERT(employee_id,phone_number) ON employees TO 'lilly'@'%';
Query OK, 0 rows affected (0.009 sec)
  • 如果要授权用户对多个对象的多个权限,可以使用逗号分隔,例如授权用户'lilly'@'%'对于表"employees","orders"的SELECT权限:
GRANT SELECT ON employees,'orders' TO 'lilly'@'%';
  • 如果要授权用户可以将该权限授权给其他用户,可以添加WITH GRANT OPTION选项:
GRANT SELECT ON employees TO 'lilly'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.010 sec)
  • 假设有一个角色名为"monorole",其中包含了SELECTINSERTUPDATE等权限,现在要将这个角色授权给用户lilly@%,则可以使用以下语句:
GRANT monorole TO 'lilly'@'%';
Query OK, 0 rows affected (0.014 sec)
  • 如果要将授权给多个用户,可以使用逗号分隔:
GRANT monorole TO 'lilly'@'%','bob'@'localhost';
Query OK, 0 rows affected (0.028 sec)
  • 如果要授权用户可以将该角色授权给其他用户,可以添加WITH ADMIN OPTION选项:
GRANT monorole TO 'lilly'@'%' WITH ADMIN OPTION;
Query OK, 0 rows affected (0.016 sec)

MySQL 兼容性

GRANT语句与 MySQL 8.0 的“GRANT”功能完全兼容

更多详情,请参考mariadb