Enhance: 优化excel/csv导入性能#3885
Conversation
t8y2
left a comment
There was a problem hiding this comment.
当前审查被分支冲突阻塞,暂不作 approve/request-changes 结论。
精确 head e9432ca 与最新 main 在 16 个文件存在重叠冲突,包含本 PR 的核心调用链:crates/dbx-core/src/table_import.rs、connection.rs、transfer.rs、Web import routes、前端 backend bridge 和全部 locale。当前 GitHub 状态为 CONFLICTING / DIRTY;现有绿灯 CI 验证的是冲突前的合成结果,不能证明冲突解决后的导入行为。
请先将最新 main 合入或重放到当前分支,保持改动范围聚焦,并重新运行 frontend、rust-fmt-clippy、rust-test 与数据库环境检查。更新 head 后我会继续检查 CSV/XLSX 流式解析、PostgreSQL COPY、Oracle INSERT ALL、取消语义和临时上传生命周期。
t8y2
left a comment
There was a problem hiding this comment.
request changes: 除当前与 main 的冲突外,XLSX 磁盘 shared-string 路径还存在一个独立的敏感数据暴露问题。
crates/dbx-core/src/table_import.rs:1655 在 shared strings 超过内存阈值后,将所有字符串值及其索引写入系统临时目录。两个文件都通过普通 OpenOptions::create_new(true) 创建,没有在 Unix 上指定 0o600,也没有使用安全临时文件实现。Rust 官方文档说明,未设置 mode 时新文件默认使用 0o666 再应用进程 umask;常见 0o022 下会得到 0o644,同机其他用户可读取导入中的客户数据、凭证或其他敏感表格内容。
官方文档:https://doc.rust-lang.org/std/os/unix/fs/trait.OpenOptionsExt.html
文件目前还只依赖 Drop 删除,进程崩溃或被强制结束时可能残留。
请使用安全临时文件实现(例如 Unix 默认 0o600 的 tempfile),或在 Unix 创建 data/index 文件时明确设置 mode(0o600);补强制磁盘路径测试,断言两个文件仅 owner 可读写,并覆盖正常结束、解析失败后的清理。完成后还需先解决当前 16 个重叠文件冲突并重跑完整 CI。
变更说明
变更类型
涉及前端
验证
make check通过make cargo-check-fast通过关联 Issue
#2999
其他
这个是导入的第1个PR,还有优化空间, 后续整理成第二个PR: