首批通过分布式安全可靠测评,为关键业务系统打造
GRANT
更新时间:2026-04-10 11:58:01
描述
该语句用于给指定的用户或角色授予相应的权限,或者将角色授予用户或角色。
使用限制及注意事项
不支持循环 GRANT 操作。例如,角色 A 授予角色 B,角色 B 授予角色 C,则角色 C 授予角色 A 会报错。
权限要求
将对象权限授予用户权限要求
执行
GRANT语句时,当前用户必须拥有被授予的权限。例如,想要使用用户user1为用户user2授予表tbl1的SELECT权限,则用户user1必须拥有表tbl1的SELECT权限。执行
GRANT语句时,当前用户需拥有GRANT OPTION权限。关 OceanBase 数据库权限的详细介绍,请参见 MySQL 模式下的权限分类。
说明
为用户授权后,该用户需重新连接 OceanBase 数据库,权限才能生效。
将角色授予用户或角色权限要求
- 当前用户具备
SUPER权限时,可以GRANT所有角色。 - 将角色授予其他用户或角色时,当前用户必须拥有被授予的角色,并且拥有
ADMIN OPTION权限,才能授权成功。查看当前用户所拥有的权限的相关操作请参见 查看用户权限。
语法
将对象权限授予用户或角色
GRANT priv_type[(column_name_list)] [, priv_type[(column_name_list)] ...]
ON [object_type] priv_level
TO {user [, user...]}
[WITH GRANT OPTION];
column_name_list:
column_name [, column_name ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
user:
user_or_role
| user_name IDENTIFIED [WITH auth_plugin] BY password
| user_name IDENTIFIED [WITH auth_plugin] BY PASSWORD password
user_or_role:
user_name | role_name
将角色授予用户或角色
GRANT role_name [, role_name ...]
TO user_or_role [, user_or_role ...]
[WITH ADMIN OPTION];
user_or_role:
user_name | role_name
参数解释
| 参数 | 描述 |
|---|---|
| priv_type | 指定授予的权限类型,可以授予多个权限,多个权限间使用英文逗号(,)隔开。具体的权限类型及其说明请参见 MySQL 模式下的权限分类。 |
| column_name_list | 可选项,用于授予列级权限的列表,授予的权限仅作用于列出的列上。如果不指定,则权限适用于整个表或对象。详细介绍信息,参见 直接授予权限。 |
| object_type | 可选项,表示授权的对象类型(即权限应用的对象类型)。详细介绍可参见下文 object_type。 |
| priv_level | 指定授予权限的层级。可以指定在所有数据库和所有表上生效(*.*)、指定数据库或指定表生效(db_name.*,*.table_name)、或者特定的数据库中特定的表生效(db_name.table_name)。 |
| user | 指定要授予权限的用户,可以是一个或多个用户,多个用户间使用英文逗号(,)隔开。如果用户不存在,该语句会直接创建用户。 |
| auth_plugin | 用于指定用户身份验证的方式,目前仅支持 mysql_native_password 身份验证插件。 |
| BY password | 为待授权的用户指定一个密码,此处密码为明文,存入 mysql.user 表后,服务器端会变为密文存储下来。如果密码中包含特殊字符 ~!@#%^&*_-+=`|(){}[]:;',.?/,需使用英文引号('' 或 "")包含。 |
| BY PASSWORD password | 为待授权的用户指定一个密码,此处密码为密文,将直接存入 mysql.user 表。 |
| WITH GRANT OPTION | 指定权限是否允许转授,取消授权时级联。 |
| role_name | 指定角色的名称。 |
| WITH ADMIN OPTION | 指定角色权限是否允许转授,取消授权时不级联。 |
object_type
注意
在使用 object_type 子句时,需要确保所指定的对象确实是对应的类型,否则将导致语法错误。
TABLE:表示权限应用的对象类型是表。FUNCTION:表示权限应用的对象类型是函数。PROCEDURE:表示权限应用的对象类型是存储过程。
示例如下:
授予
user001对test数据库下所有对象的SELECT权限,因为所指定的对象不是指定的类型,所以导致会报错。GRANT SELECT ON TABLE test.* TO user001;返回结果如下:
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used授予
user001对test数据库下表tbl1的SELECT权限。GRANT SELECT ON TABLE test.tbl1 TO user001;授予
user002对test数据库下函数calculate_salary的执行权限。GRANT EXECUTE ON FUNCTION test.calculate_salary TO user002;授予
user003对test数据库下存储过程pro_generate_data的执行权限。GRANT EXECUTE ON PROCEDURE test.pro_generate_data TO user003;
示例
示例一:授予对象权限
为已存在的用户
user1赋予数据库db1的CREATE VIEW权限,并设置允许转授其他用户相同的权限。GRANT CREATE VIEW ON db1.* TO user1 WITH GRANT OPTION;为已存在的用户
user1赋予数据库db1的CREATE权限,并修改user1的密码。GRANT CREATE ON db1.* TO user1 IDENTIFIED by '********';执行后查看
mysql.user表中user1用户的密码,会看到已更新为最新设置的密码。为不存在的用户
user2赋予数据库db1的CREATE权限,并为user2设置密码。GRANT CREATE ON db1.* TO user2 IDENTIFIED by '********';为已存在的用户
user001赋予数据库test中的表tbl1列col1的SELECT权限。GRANT SELECT(col1) ON test.tbl1 TO user001;
示例二:将角色授予用户或角色
将角色
role001的权限授予角色role002,并且允许转授。GRANT role001 TO role002 WITH ADMIN OPTION;将角色
role001的权限授予用户user001,并且允许转授。GRANT role001 TO user001 WITH ADMIN OPTION;
相关文档
- 查看用户权限的操作可参见 查看用户权限。
- 可从
mysql.user表中查看创建的用户信息,mysql.user表的详细介绍可参见 mysql.user。 - 向角色中添加权限
- 将角色授予用户或角色
- 激活角色
- 间接授权