CREATE ROLE MAPPING
描述
CREATE ROLE MAPPING 语句用于为认证集成创建角色映射规则。用户通过该认证集成完成认证后,Doris 会依次计算 RULE 子句,并将所有命中规则授予的角色合并后赋予当前会话。
版本支持
该功能自 SelectDB Enterprise 4.1.4 起支持。
语法
CREATE ROLE MAPPING [IF NOT EXISTS] <mapping_name>
ON AUTHENTICATION INTEGRATION <integration_name>
RULE (
USING CEL '<condition>'
GRANT ROLE <role_name> [, <role_name> ...]
)
[, RULE (
USING CEL '<condition>'
GRANT ROLE <role_name> [, <role_name> ...]
) ...]
[COMMENT '<comment>'];
必选参数
1. <mapping_name>
指定角色映射名称。
2. <integration_name>
指定角色映射绑定的认证集成名称。
3. RULE (...)
指定一条或多条角色映射规则。每条规则包含一个 CEL 条件表达式和至少一个要授予的 Doris 角色。
4. USING CEL '<condition>'
指定在认证阶段计算的 CEL 布尔表达式。
5. GRANT ROLE <role_name> [, <role_name> ...]
指定规则命中后授予的一个或多个 Doris 角色。
可选参数
1. IF NOT EXISTS
如果同名角色映射已存在,不返回错误。
2. COMMENT '<comment>'
指定角色映射的注释。
CEL 辅助函数
| 函数 | 说明 |
|---|---|
name() | 返回认证后的登录名。 |
external_principal() | 返回外部主体标识。 |
is_service_principal() | 返回当前主体是否为服务主体。 |
has_group("<group>") | 判断外部用户组是否包含指定值。 |
has_role("<role>") | 判断多值属性 roles 是否包含指定值。 |
has_scope("<scope>") | 判断多值属性 scope 或 scp 是否包含指定值。 |
attr("<key>") | 返回单值属性;属性不存在时返回空字符串。 |
has_attr_value("<key>", "<value>") | 判断指定属性是否包含指定值。 |
has_any_group("<g1>", "<g2>", ...) | 判断是否命中任一指定用户组。 |
has_any_role("<r1>", "<r2>", ...) | 判断是否命中任一指定角色值。 |
has_any_scope("<s1>", "<s2>", ...) | 判断是否命中任一指定 scope。 |
has_any_attr_value("<key>", "<v1>", "<v2>", ...) | 判断指定属性是否包含任一指定值。 |
权限控制
执行此 SQL 命令的用户必须至少具有以下权限:
| 权限 | 对象 | 说明 |
|---|---|---|
ADMIN_PRIV | 用户(User)或角色(Role) | 只有拥有该权限的用户或角色才能执行此操作。 |
注意事项
- 目标认证集成必须存在,并且对应认证插件需要能够提供用户组、scope 或其他主体属性。
- 每个认证集成最多只能绑定一个角色映射。
- 每条规则的条件不能为空,并且必须能编译为 CEL 布尔表达式。
GRANT ROLE中的角色必须在创建角色映射前存在。- 多条规则同时命中时,Doris 会合并这些规则授予的角色。
- 在 OIDC 场景中,
has_group(...)读取的字段由oidc.groups_claim指定,attr(...)可读取的额外字段由oidc.extra_claims指定。
示例
- 创建包含多条规则的角色映射:
CREATE ROLE analyst;
CREATE ROLE finance_reader;
CREATE ROLE dashboard_readonly;
CREATE ROLE MAPPING corp_oidc_roles
ON AUTHENTICATION INTEGRATION corp_oidc
RULE (
USING CEL 'has_group("analyst")'
GRANT ROLE analyst
),
RULE (
USING CEL 'attr("department") == "finance"'
GRANT ROLE finance_reader
),
RULE (
USING CEL 'has_scope("session:role:reader")'
GRANT ROLE dashboard_readonly
)
COMMENT '公司 OIDC 用户的角色映射';
- 一条规则同时授予多个角色:
CREATE ROLE platform_admin;
CREATE ROLE audit_reader;
CREATE ROLE MAPPING corp_oidc_admin_roles
ON AUTHENTICATION INTEGRATION corp_oidc
RULE (
USING CEL 'has_group("platform-admin")'
GRANT ROLE platform_admin, audit_reader
);