StarRocks current_role 函数详解:查询当前会话已激活角色

发布时间:2026/9/19 11:04:09

StarRocks current_role 函数详解:查询当前会话已激活角色 StarRocks current_role 函数详解查询当前会话已激活角色【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks本文围绕 StarRocks 的current_role()信息函数展开介绍其语法、返回值与典型用法并结合前端FE源码说明该函数背后的实现原理以及它与SET ROLE、GRANT、is_role_in_session()等角色权限RBAC体系组件的联动方式。读完本文你将掌握如何在当前会话中查询已激活的角色并能通过该函数验证角色激活是否生效为权限问题的排查提供依据。功能概述current_role()用于查询当前用户当前会话中已激活的角色。它是 StarRocks 内置的信息函数Information Function之一在 FunctionSet.java 中与connection_id()、database()、user()、current_user()、current_group()等一同被收录进INFORMATION_FUNCTIONS集合因此可以像普通表达式一样在SELECT语句中使用。需要区分两个概念用户被授予的角色Granted Roles通过GRANT语句授予给用户的全部角色已激活的角色Activated Roles在当前会话中真正生效的角色只有激活后角色所附带的权限与嵌套角色才会参与授权检查。current_role()返回的是后者——即当前会话中已激活的角色列表。语法与参数current_role(); current_role;该函数支持两种调用形式带括号的current_role()以及省略括号的current_role与database、user等信息函数保持一致。参数无。返回值VARCHAR类型。返回值详解current_role()的返回值由 ExpressionAnalyzer.java 中的visitInformationFunction逻辑决定其行为可以归纳为以下三种情况有已激活角色返回当前会话所有已激活角色的名称多个角色之间以逗号加空格,分隔没有已激活角色返回字符串NONE返回值的类型固定为VARCHAR。从源码实现看该函数逐个读取会话上下文中记录的角色 IDsession.getCurrentRoleIds()再通过AuthorizationMgr.getRolePrivilegeCollectionUnlocked(roleId, false)反查出对应的角色名称并拼接输出若角色 ID 列表为空则直接返回NONE。已激活角色从何而来源码级调用链要理解current_role()的返回值需要了解已激活角色在 StarRocks 中的产生路径。当前会话的角色 ID 集合存储于 FE 的ConnectContext中主要通过以下两条路径被设置1. 登录时设置默认角色用户建立连接如通过 MySQL 协议登录时FE 会根据认证信息初始化当前会话的角色。见 UserIdentityUtils.java当 Thrift 认证信息中携带了current_role_ids时会将其与用户实际拥有的角色求交集后写入ConnectContext否则以用户身份对应的默认角色作为当前角色。2. 执行 SET ROLE 激活角色用户在会话内通过SET ROLE语句动态切换/激活角色见 SetRoleExecutor.java。SET ROLE支持四种形式-- 激活指定的一个或多个角色 SET ROLE role_name[,role_name,..]; -- 激活用户的所有角色但排除指定的角色 SET ROLE ALL EXCEPT role_name[,role_name,..]; -- 激活用户的所有角色 SET ROLE ALL; -- 关闭当前会话的所有角色不激活任何角色 SET ROLE NONE;SET ROLE执行时会校验角色确实已授予给当前用户getValidRoleId会检查角色是否存在、是否被授予随后调用context.setCurrentRoleIds(roleIds)更新会话的角色状态。之后调用current_role()即可看到激活结果。完整使用示例原文档给出的基础示例如下mysql select current_role(); ---------------- | current_role() | ---------------- | db_admin | ----------------下面结合角色生命周期给出一个完整的端到端示例-- 1. 查看当前用户被授予了哪些角色 SHOW GRANTS; --------------------------------------------------------------------- | UserIdentity | Catalog | Grants | --------------------------------------------------------------------- | test% | NULL | GRANT db_admin, user_admin TO test% | --------------------------------------------------------------------- -- 2. 尚未激活任何角色时current_role() 返回 NONE SELECT CURRENT_ROLE(); ---------------- | CURRENT_ROLE() | ---------------- | NONE | ---------------- -- 3. 激活 db_admin 角色 SET ROLE db_admin; -- 4. 再次查询角色已激活 SELECT CURRENT_ROLE(); -------------------- | CURRENT_ROLE() | -------------------- | db_admin | -------------------- -- 5. 激活全部角色ALL 形式 SET ROLE ALL; SELECT CURRENT_ROLE(); ---------------------------- | CURRENT_ROLE() | ---------------------------- | db_admin, user_admin | ---------------------------- -- 6. 关闭所有角色 SET ROLE NONE; SELECT CURRENT_ROLE(); ---------------- | CURRENT_ROLE() | ---------------- | NONE | ----------------注意SET ROLE命令自 v3.0 起支持。current_role()的返回值受会话中角色激活状态影响不同会话之间互不影响。与 is_role_in_session() 的配合使用除current_role()外StarRocks 还提供了is_role_in_session(VARCHAR role_name)用于精确验证某个角色含嵌套角色是否在会话中激活详见 is_role_in_session该函数自 v3.1.4 起支持。两者定位不同current_role()返回激活角色的名称列表适合快速查看整体状态is_role_in_session()返回布尔值1表示已激活、0表示未激活适合在脚本中做条件判断或校验嵌套角色是否随父角色一并生效。示例-- 创建角色与用户并将 r2、r3 嵌套进 r1最后授予用户 u1 create role r1; create role r2; create role r3; create user u1; grant r3 to role r2; grant r2 to role r1; grant r1 to user u1; -- 以 u1 身份操作 execute as u1 with no revert; -- 未激活前r1 未激活 select is_role_in_session(r1); -- 返回 0 -- 激活 r1 后嵌套角色 r2、r3 一并激活 set role r1; select is_role_in_session(r1); -- 返回 1 select is_role_in_session(r2); -- 返回 1 select is_role_in_session(r3); -- 返回 1注意事项与最佳实践激活角色影响全部授权检查已激活的角色会影响所有权限校验包括对information_schema系统视图的查询。例如执行SET ROLE role1后SELECT * FROM information_schema.tables只会返回role1权限范围内的表。因此在使用current_role()排查为什么看不到某张表/某条元数据时请先确认当前会话激活的角色是否符合预期。只能激活已授予的角色SET ROLE无法激活用户未持有的角色源码中getValidRoleId会显式校验并抛出 Role xxx is not granted to ... 异常。若激活失败可通过 SHOW GRANTS 确认用户实际拥有的角色。无角色返回 NONE当会话未激活任何角色时current_role()返回字符串NONE而非空串或 NULL判断是否有激活角色时可据此处理。角色生命周期管理角色的创建、授权、修改、删除分别对应 CREATE ROLE、GRANT、ALTER USER、SHOW ROLES 等语句被删除的角色会从会话激活列表中移除此时current_role()的输出也会相应变化。总结current_role()是 StarRocks 权限体系中一个轻量但实用的信息函数它以VARCHAR形式返回当前会话已激活的角色名称列表无激活角色时返回NONE。在源码层面它由 FE 的ExpressionAnalyzer依据ConnectContext中的角色 ID 集合解析生成与SET ROLE的角色激活机制、is_role_in_session()的角色校验机制共同构成了一套完整的角色状态查询与验证工具链可用于日常的权限审计、问题排查与自动化脚本中的权限断言。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/19 11:04:09

版本升级后API全变?7654导航排查与修复实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 14:54:19

DFT频谱偏差根源与窗函数工程选型指南

简介:本资源是华南理工大学《信号与系统》课程配套的第三份实验报告,面向电子信息、通信工程等专业本科生及信号处理初学者,聚焦离散傅里叶变换(DFT)在模拟信号频谱分析中的核心应用。报告通过三大实验模块系统展开&am…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/19 0:03:10

验证 OpenSpec 兼容性,Cursor 的 Token 从 TaoToken 出

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

书桌角落的 Mac mini,OpenClaw 通过 TaoToken 跑任务。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

oh-my-hermes:打造跨工具的命令编排与插件化工作流

1. 项目概述与设计初衷1.1 它到底是什么先说结论:oh-my-hermes 是一个面向开发者日常终端操作的效率工具套件,核心定位是“把分散在各类命令行工具里的高频操作,统一收拢成一套插件化、可编排的工作流”。项目灵感来源很明显——oh-my-zsh 重…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码