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

发布时间:2026/11/7 20:44:16

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/11/7 20:44:16

版本升级后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/11/7 20:40:10

电工证招生话术简短全国通用怎么报?怕考不过白交培训费?

电工证招生话术简短全国通用怎么报?怕考不过白交培训费? 怕考不过白交培训费?别急,先看清这些细节,再报名不亏! 在应急管理领域,电工证作为特种作业操作证的一种,已经成为众多从业人员的“刚需”。尤其是在濮阳房建工程行业中,电工证不仅关乎上岗资…

2026/11/7 20:35:10

横店那里可考电工证保姆级教程:工地太忙根本没时间复习考试

横店那里可考电工证保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试?你是横店工地上的电工,每天穿梭在钢筋水泥之间,忙得连饭都顾不上吃,更别提抽出时间复习电工证考试了。但别小看这本证,它不仅是你工作的“通行证”,更是你职业生…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/7 0:03:08

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科

郑州报考避坑指南:电工证和钳工证怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。特别是在郑州这样的城市,很多施工企业负责人和一线作业人员在报考电工证和钳工证时都面临着同样的困惑。到底该考哪个证?哪个更适合自己?哪个证书…

2026/11/7 0:03:08

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱?

广西电工证办理流程全解析:外省证怎么转?在哪考最靠谱? 之前考的证在外省能不能转过来?这个问题我遇到太多了,今天就拿广西电工证办理流程来具体说说,别再走弯路了。广西电工证的报考、复审、继续教育这些环节,如果你不了解,真的会吃大亏,尤其对于从…

2026/11/7 0:03:08

电气电工证都有哪些保姆级教程

电气电工证都有哪些保姆级教程 你是不是正愁不知道去哪报名,怕被中介坑?别急,这篇保姆级教程专为河南初次报考人员准备,帮你搞清楚 电气电工证都有哪些 ,以及如何避开那些坑。 电气电工证都有哪些?别被五花八门的证书搞懵了…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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