跳到主要内容
版本:4.x

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
);