线上集群查询指定角色show grants for role abcd0829报错java.lang.NullPointerException: null,本地集群无法复现

【详述】创建一个角色abcd0829,查询角色abcd0829的权限,正常;授予SYSTEM权限给角色(下面第3条sql),再次查询角色abcd0829的权限报错:mysql> show grants for role abcd0829;
ERROR 1064 (HY000): Unknown error
查看fe日志报错:2023-08-29 16:54:11,917 WARN (starrocks-mysql-nio-pool-34|440) [StmtExecutor.execute():602] execute Exception, sql show grants for role abcd0829
java.lang.NullPointerException: null
at java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90) ~[?:?]
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1632) ~[?:?]
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127) ~[?:?]
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502) ~[?:?]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488) ~[?:?]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) ~[?:?]
at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) ~[?:?]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
at java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:528) ~[?:?]
at com.starrocks.sql.analyzer.AstToStringBuilder$AST2StringBuilderVisitor.visitGrantRevokePrivilegeStatement(AstToStringBuilder.java:184) ~[starrocks-fe.jar:?]
at com.starrocks.sql.analyzer.AstToStringBuilder$AST2StringBuilderVisitor.visitGrantRevokePrivilegeStatement(AstToStringBuilder.java:121) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.BaseGrantRevokePrivilegeStmt.accept(BaseGrantRevokePrivilegeStmt.java:161) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:55) ~[starrocks-fe.jar:?]
at com.starrocks.sql.ast.AstVisitor.visit(AstVisitor.java:51) ~[starrocks-fe.jar:?]
at com.starrocks.sql.analyzer.AstToSQLBuilder.toSQL(AstToSQLBuilder.java:53) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ShowExecutor.privilegeToRowString(ShowExecutor.java:2144) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ShowExecutor.handleShowGrants(ShowExecutor.java:2169) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ShowExecutor.execute(ShowExecutor.java:326) ~[starrocks-fe.jar:?]
at com.starrocks.qe.StmtExecutor.handleShow(StmtExecutor.java:1191) ~[starrocks-fe.jar:?]
at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:558) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:349) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:463) ~[starrocks-fe.jar:?]
at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:729) ~[starrocks-fe.jar:?]
at com.starrocks.mysql.nio.ReadListener.lambda$handleEvent$0(ReadListener.java:69) ~[starrocks-fe.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
at java.lang.Thread.run(Thread.java:834) ~[?:?]
,具体sql如下:
create role abcd0829;
show grants for role abcd0829;
GRANT CREATE RESOURCE, PLUGIN, FILE, BLACKLIST, OPERATE, CREATE EXTERNAL CATALOG, REPOSITORY, CREATE RESOURCE GROUP, CREATE GLOBAL FUNCTION ON SYSTEM TO ROLE ‘abcd0829’;
show grants for role abcd0829; 再次查询角色abcd0829的权限就报错
【背景】本地集群操作没有报错,本地集群和线上集群的区别:怀疑线上集群区分外网ip和内网ip与SYSTEM权限(GRANT CREATE RESOURCE, PLUGIN, FILE, BLACKLIST, OPERATE, CREATE EXTERNAL CATALOG, REPOSITORY, CREATE RESOURCE GROUP, CREATE GLOBAL FUNCTION ON SYSTEM TO ROLE ‘abcd0829’;)有关?因为授予其他权限没有问题
【业务影响】暂无
【StarRocks版本】3.0.3
【集群规模】三台服务器3fe+3be,即每台服务器部署fe和be
【机器信息】 CPU虚拟核/内存/网卡,16C/32G/万兆
【联系方式】 flinkxabc@yeah.net,或者社区群【StarRocks社区群12】满天星辰
【附件】
image

是从2.5升级上来3.0的吗?

直接线上部署的3.0.3版本,还没开始投入使用,现在是创建sr用户,然后给用户通过角色授予权限

目前对于system 类型的show grants 有点问题,展示会报错。下一个3.0的小版本会修复。这个bug不影响授权鉴权的正常使用,目前只影响show grants的显示。如果系统查看授权信息,可以暂时使用sys.grants_to_users/ sys.grants_to_roles来查看。

关键是为啥线上集群会报错,而本地/测试集群没问题呀?

需要重启才可以复现

像是个bug,到时候官方大佬会出来告诉大家,3.0.6版本修复 :partying_face:

我在线上集群是必现,测试集群复现不出来,测试和线上集群都是我用同一个包部署的

嚯,这样子呀,坐等修复