
StarRocks SHOW USERS 命令详解查看系统全部用户标识的语法、权限与源码实现【免费下载链接】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导读SHOW USERS是 StarRocks 账户管理体系中用于**列出系统中全部用户标识User Identity**的基础命令。与 MySQL 中的SHOW USERS语义不同StarRocks 返回的不是单纯的用户名而是usernamehost形式的完整用户标识。本文以官方文档为骨架结合 FE 端语法定义、AST 节点、执行器与授权管理器源码完整讲解该命令的语法、返回字段、权限要求、典型使用场景及其底层实现原理帮助你快速掌握查看系统里有哪些用户这一日常运维与审计操作的完整知识。一、命令概述SHOW USERS 能做什么SHOW USERS用于显示系统中所有已创建的用户。需要特别注意的是文档明确指出Users mentioned here are user identities, not user names.即该命令输出的不是单纯的用户名而是用户标识user_identity。在 StarRocks 中一个用户由user_name与host两部分共同唯一标识格式为usernameuserhost。这意味着同一个用户名可能对应多个不同的用户标识例如jack%与jack172.10.1.10是两个不同的用户因此只有以用户标识为单位进行展示才能准确反映系统的用户全貌。关于用户标识的更多细节可参阅 CREATE USER 文档中关于user_identity的说明user_identity由user_name和host两部分组成格式为usernameuserhosthost部分可以使用%进行模糊匹配若未指定host默认使用%表示该用户可以从任意主机连接 StarRocks。该命令自 v3.0 起支持。若要查看某个具体用户被授予的权限可配合使用SHOW GRANTS FOR user_identity;详见 SHOW GRANTS。二、权限要求仅user_admin角色可执行执行SHOW USERS存在严格的权限门槛。官方文档通过公共提示块明确要求Only users with theuser_adminrole has the privilege to perform this operation.即只有拥有user_admin内置角色的用户才有权限列出系统中的全部用户。user_admin是 StarRocks 提供的五个内置角色之一其定位是用户管理员可用于管理用户、角色与授权详见 内置角色说明。这一点在 FE 源码中也有印证在 AuthorizerStmtVisitor.java 的visitShowUserStatement中当语句为列出全部用户形态时会调用Authorizer.checkSystemAction(context, PrivilegeType.GRANT)进行系统级 GRANT 权限校验未通过校验时抛出AccessDeniedException并报告访问被拒绝。可以推断user_admin之所以能执行该命令正是因为它具备这一系统级权限能力。对比提示与SHOW USERS不同SHOW GRANTS 允许所有角色和用户查看授予自己的权限仅查看指定用户或角色的权限时才要求user_admin。三、语法SHOW USERS该命令不接受任何参数、通配符或谓词执行后一次性返回系统中全部用户标识。在语法层StarRocks 使用 ANTLR 文法定义该语句。在 StarRocks.g4 中可以看到showUserStatement : SHOW (USER | USERS) showPredicateClauses ;即SHOW USER与SHOW USERS共用同一条语法规则。对应的 AST 节点为 ShowUserStmt.java它通过一个isAll布尔标志区分两种形态SHOW USERS列出系统中全部用户标识SHOW USER仅显示当前会话用户自身的用户标识。官方文档仅对SHOW USERS形态做出承诺SHOW USER的行为属源码结构推断可作为补充了解。四、返回字段FieldDescriptionUserThe user identity用户标识。结果集仅包含一列User每一行是一个形如usernamehost的完整用户标识字符串。结合 AuthorizationMgr.java 的实现可知该字符串由UserIdentity.toString()生成与创建用户时所使用的user_identity表示形式一致。五、示例显示系统中的全部用户mysql SHOW USERS; ----------------- | User | ----------------- | wybing5% | | root% | | admin% | | star% | | wybing_30% | | simo% | | wybing1% | | wybing2% | -----------------从示例输出可以看出两个要点输出的是用户标识而非用户名例如wybing5%与wybing1%是不同的用户标识即使前缀相似也是完全独立的两个用户。root、admin等内置用户也出现在列表中系统初始化阶段创建的内置用户与其他用户一同列出便于管理员一览全局。六、典型实战组合SHOW USERS SHOW GRANTSSHOW USERS单独使用时只提供有哪些用户这一层信息。在实际运维中更完整的用户盘点流程是与权限查询命令配合使用盘点用户全貌SHOW USERS;查看指定用户的授权情况SHOW GRANTS FOR wybing5%;查看当前用户的授权情况所有用户均可执行SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER();SHOW GRANTS 的结果集包含UserIdentity、Catalog、Grants三列其中UserIdentity被查询的用户标识Catalog授权发生的 catalog内部 catalog 返回default外部 catalog 返回其名称角色授予场景返回NULLGrants具体的 GRANT 语句描述。通过SHOW USERS拿到全部用户标识后即可逐个使用SHOW GRANTS FOR user_identity完成对系统内所有用户授权状况的巡检例如排查是否存在权限过大的闲置账号。七、源码级实现原理SHOW USERS的完整执行链路贯穿 StarRocks FE 的语法解析、语义分析与执行三个阶段涉及的核心文件如下1. 语法解析文法定义StarRocks.g4 中的showUserStatement规则AST 节点ShowUserStmt.java通过isAll标志区分全部用户与当前用户两种形态。2. 权限校验在 AuthorizerStmtVisitor.java 的visitShowUserStatement中若statement.isAll()为 true即SHOW USERS执行Authorizer.checkSystemAction(context, PrivilegeType.GRANT)校验系统级 GRANT 权限校验失败时通过AccessDeniedException.reportAccessDenied报告访问被拒绝并终止执行。这解释了为什么只有具备user_admin角色具备系统管理类权限的用户才能执行本命令。3. 结果生成在 ShowExecutor.java 的visitShowUserStatement中if (statement.isAll()) { AuthorizationMgr authorizationManager GlobalStateMgr.getCurrentState().getAuthorizationMgr(); ListString users authorizationManager.getAllUsers(); users.forEach(u - rowSet.add(Lists.newArrayList(u))); } else { ListString row Lists.newArrayList(); row.add(context.getCurrentUserIdentity().toString()); rowSet.add(row); } return new ShowResultSet(showResultMetaFactory.getMetadata(statement), rowSet);核心数据来源是 AuthorizationMgr.getAllUsers()该方法在读锁保护下遍历授权管理器内存中的userToPrivilegeCollection映射keySet 为全部UserIdentity将每个用户标识序列化为字符串后返回。可以推断SHOW USERS的结果实时反映 FE 内存中已加载的用户集合用户一经CREATE USER创建即会出现在列表中被DROP USER删除后则立即消失。八、注意事项与常见问题区分用户与用户标识SHOW USERS输出的是user_identity不是用户名。若只想查看当前登录用户的信息可使用SHOW USER或查看SHOW GRANTS的结果。权限不足时报错非user_admin角色执行SHOW USERS会因系统级 GRANT 权限校验失败而被拒绝这与查看自身授权的SHOW GRANTS所有用户可执行形成鲜明对比。版本要求该命令自v3.0起支持使用前请确认集群版本。结果规模该命令一次性返回全部用户标识无过滤与分页参数。在用户数量庞大的集群中输出行数等于系统中用户标识总数可与客户端的分页/检索能力配合使用。命令无参数SHOW USERS不接受用户名、host 或 LIKE 通配符等过滤条件如需定向查询某用户的授权请使用SHOW GRANTS FOR user_identity。九、相关命令SHOW USERS是用户生命周期管理命令族中的查询一环与之配套的常用命令包括CREATE USER创建用户含认证方式、默认角色、用户属性ALTER USER修改用户认证信息与默认角色DROP USER删除用户SHOW GRANTS查看用户或角色的授权明细。更完整的权限体系背景可参阅 用户与权限总览 与 内置角色说明。【免费下载链接】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),仅供参考