Skip to content

fix(sql_workbench): 对齐 ODC 与 CloudBeaver 数据源权限(业务写权关闭场景)#647

Merged
Seechi-Yolo merged 1 commit into
mainfrom
dms/fix-odc-workbench-business-write
Jul 8, 2026
Merged

fix(sql_workbench): 对齐 ODC 与 CloudBeaver 数据源权限(业务写权关闭场景)#647
Seechi-Yolo merged 1 commit into
mainfrom
dms/fix-odc-workbench-business-write

Conversation

@LordofAvernus

@LordofAvernus LordofAvernus commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

问题

超管关闭某用户的业务写权、并为其配置某数据源的项目角色(开发工程师)后:

  • 使用 CloudBeaver 登录工作台仅可见该数据源(符合预期)
  • 使用 ODC 登录工作台可见其他数据源且具备 SQL 执行能力(不符合预期)

预期 ODC 与 CloudBeaver 的数据源处理保持一致。

原因

ODC 同步数据源时 getUserAccessibleDBServices 调用 CanOpGlobal(uid, false),未像 CloudBeaver 的 connectManagement 那样传入 isBusinessWrite=true。系统管理员在业务写权关闭时,CanOpGlobal 仍返回 true,跳过项目/数据源级过滤,导致 ODC 同步并可见全部活跃数据源;数据源一旦进入 ODC,审核中间件放行后即可执行 SQL。

修复

将 ODC 路径 CanOpGlobalisBusinessWrite 参数改为 true,与 CloudBeaver 对齐。业务写权关闭的系统管理员改走项目/数据源级权限过滤,cleanupObsoleteDatasources 会清理此前多同步进 ODC 的数据源,使 ODC 与 CloudBeaver 数据源可见性一致。

关联 Issue

关联 actiontech/dms-ee#810 (系统管理员业务写权开关:关闭后应移出业务候选集、接口层拦截绕过 UI 的写操作)。本次修复补齐 ODC 工作台对该开关的落实。

测试计划

  • 构造「系统管理员 + 关闭业务写权 + 某项目单数据源开发工程师」用户
  • CloudBeaver 登录:仅可见该数据源
  • 清除 ODC 会话或更换 token 后 ODC 登录:仅可见该数据源,且仅能对该数据源执行 SQL

…mission

ODC workbench datasource sync called CanOpGlobal with isBusinessWrite=false,
so a system admin whose business-write permission was disabled still bypassed
per-project/per-datasource filtering and could see and execute SQL on all
datasources. This diverged from CloudBeaver, whose connectManagement passes
isBusinessWrite=true. Pass isBusinessWrite=true here as well so such an admin
falls back to project/datasource-level permission filtering, keeping ODC and
CloudBeaver datasource visibility consistent.
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

PR Reviewer Guide 🔍

⏱️ Estimated effort to review: 1 🔵⚪⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
确认业务写权限一致性


请确认传入的true参数能在后续权限过滤逻辑中正确生效,确保业务写权限与CloudBeaver保持一致,避免因为参数错误导致权限检查失效。建议增加相关单元测试以验证此变更对整体权限判断逻辑的影响。

internal/sql_workbench/service/sql_workbench_service.go [546]

+hasGlobalOpPermission, err := sqlWorkbenchService.opPermissionVerifyUsecase.CanOpGlobal(ctx, dmsUser.UID, true)
 
-
Suggestion importance[1-10]: 5

__

Why: The suggestion only asks to verify that the true parameter behaves as expected and recommends adding tests without altering the code logic, resulting in the improved code being identical to the existing code.

Low

@Seechi-Yolo Seechi-Yolo merged commit be792e3 into main Jul 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants