首批通过分布式安全可靠测评,为关键业务系统打造
SET ROLE
更新时间:2026-06-17 13:35:30
描述
该语句用于启用或禁用当前会话的角色权限。
语法
SET ROLE
{ role_name [ IDENTIFIED BY password ][, role_name [ IDENTIFIED BY password ] ]...
| ALL [ EXCEPT role_name [, role_name ]... ]
| NONE
}
-- 角色类型说明
role_name:
'role_name' -- 字符串形式
| name -- 标识符形式
| DBA -- 内置角色
| RESOURCE
| CONNECT
| PUBLIC
参数解释
| 参数 | 描述 | |---------------|----------------- | | role_name | 指定要为当前会话启用的角色名称。 | | IDENTIFIED BY password | 指定角色的密码。如果角色有密码,则您必须指定密码才能启用该角色。 | | ALL | 启用为当前会话授予的所有角色。EXCEPT 子句表示列出的角色除外,为可选项。如果您已被直接授予任何具有密码的角色,则不能指定此子句,否则会引发报错。 | | NONE | 禁用当前会话的所有角色。 |
示例
-- 1. 创建角色和表
obclient> CREATE ROLE manager_role;
obclient> CREATE ROLE analyst_role;
obclient> CREATE TABLE employees(id INT, name VARCHAR(20));
-- 2. 授予角色权限
obclient> GRANT SELECT ON employees TO analyst_role;
obclient> GRANT ALL ON employees TO manager_role;
-- 3. 将角色授予用户
obclient> CREATE USER john IDENTIFIED BY "Password123!";
obclient> GRANT manager_role, analyst_role TO john;
-- 4. 用户切换角色
obclient> CONNECT john/password
obclient> SET ROLE manager_role; -- 使用管理员角色
obclient> SET ROLE analyst_role; -- 切换到分析师角色
obclient> SET ROLE ALL; -- 启用所有角色
obclient> SET ROLE ALL EXCEPT analyst_role; -- 启用除分析师外的所有角色
obclient> SET ROLE NONE; -- 禁用所有角色