Commit 6d58b2e9 authored by wangteng's avatar wangteng

代码提交

parent 7725b457
server {
listen 80;
server_name 192.168.20.175;
location = /db-tool {
return 301 /db-tool/;
}
location ^~ /db-tool/api/ {
proxy_pass http://127.0.0.1:8767/api/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 10s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location ^~ /db-tool/ {
root /opt/web;
try_files $uri $uri/ /db-tool/index.html;
index index.html;
add_header Cache-Control "no-cache, max-age=0, must-revalidate" always;
}
}
[Unit]
Description=db-tool FastAPI backend
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/app/db-tool
Environment=PYTHONPATH=/opt/app/db-tool
Environment=WEB_DB_PATH=/opt/app/db-tool/web/data/web.db
Environment=WEB_HOST=127.0.0.1
Environment=WEB_PORT=8767
ExecStart=/opt/app/db-tool/.venv/bin/python -m web.backend.start
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
#!/usr/bin/env python3
"""db-tools 服务器远程命令助手 — python rssh.py "命令" (密码不落盘, 从环境变量 DBTOOL_PW 读)"""
import sys, os, paramiko
HOST, USER = "192.168.20.175", "root"
pw = os.environ.get("DBTOOL_PW")
if not pw:
sys.exit("set DBTOOL_PW first")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect(HOST, username=USER, password=pw, timeout=10, look_for_keys=False, allow_agent=False)
cmd = sys.argv[1] if len(sys.argv) > 1 else "echo no-cmd"
_, out, err = c.exec_command(cmd, timeout=560)
sys.stdout.write(out.read().decode("utf-8", "replace"))
e = err.read().decode("utf-8", "replace")
if e.strip():
sys.stderr.write("[stderr] " + e)
c.close()
...@@ -12,5 +12,7 @@ from .rule_library import FieldRule, RuleLibrary ...@@ -12,5 +12,7 @@ from .rule_library import FieldRule, RuleLibrary
from .task import Task from .task import Task
from .task_group import TaskGroup from .task_group import TaskGroup
from .data_source import DataSource from .data_source import DataSource
from .operation_record import OperationRecord
from .table_design_config import TableDesignConfig
__all__ = ["ConnectionPreset", "Field", "Rule", "RuleLibrary", "FieldRule", "Task", "TaskGroup", "DataSource"] __all__ = ["ConnectionPreset", "Field", "Rule", "RuleLibrary", "FieldRule", "Task", "TaskGroup", "DataSource", "OperationRecord", "TableDesignConfig"]
# 数据库工具功能介绍与操作手册
## 1. 文档说明
本文档用于介绍“数据库工具”的主要功能,并说明各功能的基本操作方法。文档既可作为产品功能介绍,也可作为日常使用时的操作参考。
> 适用对象:数据库管理员、数据治理人员、测试人员及需要执行数据校验、备份恢复和数据安全处理的业务人员。
>
> 说明:本文档中的截图位置使用“【截图位置】”标记,后续可替换为实际页面截图。
## 2. 产品概述
数据库工具面向数据库日常管理和数据质量治理场景,提供统一的 Web 操作界面。用户可以先维护数据源和校验规则,再创建校验任务,对数据库表和字段进行质量检查;同时可以按需执行数据库备份、还原、清表、加密和解密操作。
工具当前支持以下数据库类型:
- MySQL
- Oracle
- 达梦 DM
系统采用左侧功能菜单和右侧内容区的布局。左侧菜单分为“备份”“加密”“校验”“配置”四个功能组,点击菜单项即可进入对应页面。页面上常见的“查询”“重置”“新增”“编辑”“删除”“扫描”“查看”等按钮,分别用于列表检索、表单维护和任务执行。
【截图位置:系统首页或整体界面,建议放置包含左侧菜单的截图】
## 3. 功能总览
| 功能组 | 功能 | 主要用途 |
| --- | --- | --- |
| 备份 | 备份 | 将整个数据库或指定数据表的结构、数据保存为备份文件 |
| 备份 | 还原 | 根据备份版本,将数据库或指定数据表恢复到目标数据库 |
| 备份 | 清表 | 先自动备份,再清空整个数据库或指定数据表的数据 |
| 加密 | 加密 | 对整张表或指定字符字段进行加密处理 |
| 加密 | 解密 | 使用正确密码对已加密的数据进行解密 |
| 校验 | 表设计 | 检查表注释、字段注释等表结构规范 |
| 校验 | 数据 | 按校验任务和规则检查数据内容,查看不合规明细 |
| 配置 | 数据源 | 新增、编辑、测试和删除数据库连接信息 |
| 配置 | 规则设置 | 管理正则、数值、日期和字符串等校验规则 |
| 配置 | 系统配置 | 设置备份文件存放目录及查看相关安全策略 |
## 4. 使用前准备
### 4.1 配置数据源
在首次使用校验、备份、还原、清表、加密或解密功能前,建议先在“配置 > 数据源”中维护可用的数据源。
操作步骤:
1. 进入“配置 > 数据源”。
2. 点击“新增数据源”。
3. 填写数据源名称、数据库类型、主机、端口、数据库或 Schema、用户名和密码。
4. 选择“启用”或“停用”状态。
5. 点击“保存”。
6. 在数据源列表中点击“测试”,确认连接成功。
数据源列表支持按名称、类型、地址和数据库进行关键字查询,并提供编辑、删除操作。删除数据源前应确认没有正在使用该数据源的校验任务或操作计划。
【截图位置:数据源列表页】
【截图位置:新增/编辑数据源弹窗】
### 4.2 配置备份目录
进入“配置 > 系统配置”,在“备份文件存放目录”中填写后端服务所在机器上的目录,并点击“保存”。备份、还原、加密和解密共用该目录。
系统使用 `db-tools-backup JSON` 格式保存备份文件,备份版本通常按时间戳命名。密码不会保存到系统配置中,涉及加密文件的还原或解密时需要重新输入密码。
【截图位置:系统配置页】
## 5. 数据源管理
### 5.1 新增数据源
新增数据源时,名称、主机、端口和用户名为必填信息。数据库类型可选择 MySQL、Oracle 或达梦 DM。密码字段支持显示/隐藏;编辑已有数据源时,密码留空表示保持原密码不变。
### 5.2 测试连接
在数据源列表中点击“测试”,系统会使用当前连接信息访问数据库,并在“最近测试”列显示成功或失败结果。连接测试失败时,请检查主机地址、端口、防火墙、数据库名称、用户名、密码及数据库客户端配置。
### 5.3 编辑和删除
点击“编辑”可修改数据源信息,保存后对后续操作生效。点击“删除”前系统会弹出确认提示;删除只影响工具中的连接配置,不会删除数据库中的业务数据。
## 6. 规则设置
“配置 > 规则设置”用于维护数据校验规则。规则可被多个数据校验任务复用。
### 6.1 支持的规则类型
- **正则**:通过正则表达式校验文本格式,例如身份证号、手机号、编码格式等。
- **数值**:通过校验代码检查数值范围、大小关系或其他数值条件。
- **日期**:通过校验代码检查日期格式、日期范围等条件。
- **字符串**:通过校验代码检查长度、字符集或内容规则。
### 6.2 新增规则
1. 进入“配置 > 规则设置”,点击“新增规则”。
2. 填写规则名称和规则说明。
3. 选择规则类型。
4. 填写正则表达式或校验代码。
5. 设置“空值”处理方式:选择“跳过”时,空值不参与该规则校验;选择“不跳过”时,空值按不通过处理。
6. 点击“表达式验证”,确认表达式或代码有效。
7. 点击“保存”。
规则编辑弹窗支持填写“AI 生成提示词”。点击“AI 生成”后,系统会根据提示词、规则名称和规则类型生成规则说明及表达式/代码;生成结果仍需人工确认,并建议点击“表达式验证”后再保存。
【截图位置:规则设置列表页】
【截图位置:新增/编辑规则弹窗,建议展示 AI 生成和表达式验证区域】
### 6.3 规则维护建议
- 规则名称应清晰表达校验目的,避免使用“规则1”等无业务含义的名称。
- 规则说明应写明校验对象、通过条件和空值处理约定。
- AI 生成的表达式或代码必须结合实际字段类型和业务要求复核。
- 删除规则前应确认没有任务依赖该规则。
## 7. 数据校验
数据校验包括“校验 > 数据”下的校验任务配置和扫描结果查看两部分。
### 7.1 新增数据校验任务
1. 进入“校验 > 数据”,点击“新增校验”。
2. 填写任务名称和任务说明。
3. 选择已经配置的数据源。
4. 选择数据库或 Schema,并选择需要校验的数据表。
5. 系统加载所选数据表的字段列表、字段注释和数据类型。
6. 为至少一个字段选择一个或多个校验规则。
7. 根据需要调整字段顺序和字段是否默认展示。
8. 点击“保存”。
如果连接信息尚未验证,系统不会继续加载 Schema、数据表和字段。数据源发生变化后,建议重新测试连接并重新加载字段。
【截图位置:数据校验任务列表页】
【截图位置:新增/编辑数据校验弹窗,建议展示数据源、数据表和字段规则配置】
### 7.2 编辑和删除任务
在任务列表中:
- 点击“编辑”可修改任务名称、数据源、数据表及字段规则。
- 点击“删除”可删除任务配置。删除前系统会弹出确认提示。
- 如果数据库表结构发生变化,编辑任务时可重新同步字段信息;已经配置的规则会尽量按字段名保留。
### 7.3 执行数据扫描
1. 在数据校验任务列表中找到目标任务。
2. 点击“扫描”,进入数据校验结果页面。
3. 确认当前任务后,点击“开始扫描”。
4. 系统按分页方式扫描数据,并显示扫描进度和已命中的不合规记录数。
5. 扫描完成后,在“不合规数据明细”区域查看结果。
扫描过程中可以点击“中断”。中断后已经返回的不合规数据会保留,下一次点击“开始扫描”会重新执行完整扫描。
【截图位置:数据扫描页面,建议展示任务选择、扫描按钮和进度信息】
### 7.4 查看和处理扫描结果
结果表展示不合规数据明细及对应字段。用户可以:
- 点击“字段配置”,勾选需要展示的字段,并调整字段顺序。
- 点击单元格中的红色感叹号,查看该字段命中的规则和不合规原因。
- 在问题明细中调用 AI 分析,辅助判断违规原因,并审查规则说明与规则代码是否一致。
- 点击“导出 Excel”,将当前结果导出为 Excel 文件。导出字段以字段配置中的可见字段为准。
当结果数据量较大时,导出可能需要一定时间;系统会在大数据量场景下提示用户确认。
【截图位置:不合规数据明细表】
【截图位置:字段配置抽屉】
【截图位置:AI 问题分析弹窗】
## 8. 表设计校验
“校验 > 表设计”用于检查数据库表结构是否符合注释规范,当前主要支持表注释和字段注释检查。
### 8.1 新增表设计校验配置
1. 进入“校验 > 表设计”,点击“新增校验”。
2. 填写校验名称。
3. 选择数据源和数据库/Schema。
4. 选择校验范围:整个数据库,或指定数据表。
5. 选择校验规则:
- 表必须有注释;
- 所有字段必须有注释。
6. 点击“保存”。
【截图位置:表设计校验配置列表页】
【截图位置:新增/编辑表设计校验弹窗】
### 8.2 执行表设计扫描
在配置列表中点击“扫描”,或进入结果页选择校验名称后点击“开始扫描”。结果会按数据表展示,包含表名、表注释、合格/不合格状态和不合格原因;缺少注释的字段会在原因中列出。
【截图位置:表设计校验结果页】
## 9. 数据库备份
“备份 > 备份”用于创建数据库备份任务。
操作步骤:
1. 点击“新增备份”。
2. 选择数据源。
3. 选择数据库或 Schema。
4. 选择备份范围:整个数据库,或指定数据表。
5. 选择是否包含“表结构”和“表数据”。
6. 点击“开始备份”。
备份完成后,系统会自动生成备份文件名,并在备份记录列表中保存任务名称、数据源、数据库、数据表、执行设置、状态和创建时间。点击“查看”可查看执行设置详情。
建议在执行清表、批量加密或其他高风险操作前先创建完整备份,并确认备份记录状态为“已完成”。
【截图位置:备份列表页】
【截图位置:新增备份弹窗】
## 10. 数据库还原
“备份 > 还原”用于从已有备份文件恢复数据库对象和数据。
操作步骤:
1. 点击“新增还原”。
2. 选择目标数据源和目标数据库/Schema。
3. 选择匹配的备份版本。
4. 选择还原范围:备份中的整个数据库,或指定数据表。
5. 设置冲突处理方式:
- **已有表跳过**:目标库中已存在的表不处理;
- **删除后重建**:删除目标表后按备份内容重建。
6. 点击“开始还原”。
还原前应确认目标数据库、备份版本和冲突策略,避免覆盖当前数据。还原密码不会从系统配置中读取,涉及加密备份时需要按页面提示输入正确密码。
【截图位置:还原列表页】
【截图位置:新增还原弹窗】
## 11. 清表
“备份 > 清表”用于清空指定数据库或数据表的数据。系统执行清表前会先备份完整的表结构和数据,清表后可以使用清表记录中的“还原”操作恢复。
操作步骤:
1. 点击“清空数据表”。
2. 选择数据源和数据库/Schema。
3. 选择清空范围:整个数据库,或指定数据表。
4. 阅读清表说明并点击“确认清空”。
5. 在确认对话框中再次确认。
清表属于高风险操作。执行前应确认数据源、数据库和表范围无误,并确保备份目录可写。清表记录中会显示备份文件、数据源、数据库、已清空数据表和备份时间;点击“还原”可恢复对应备份数据,恢复前同样需要二次确认。
【截图位置:清表列表页】
【截图位置:清空数据表弹窗及二次确认提示】
## 12. 数据加密与解密
### 12.1 加密
“加密 > 加密”用于对数据库中的数据进行保护处理。
1. 点击“新增加密”。
2. 选择数据源、数据库/Schema 和数据表。
3. 选择处理范围:整张表,或指定字段。
4. 指定字段模式下,勾选需要处理的字段。
5. 设置加密密码,密码至少 4 位。
6. 点击“开始加密”。
整表模式会处理所有字符字段,数字、日期等字段保持原类型。加密前建议先备份,并妥善保管密码。
### 12.2 解密
“加密 > 解密”的操作流程与加密基本一致,但需要输入加密时使用的正确密码。解密失败时,请核对数据源、数据库、数据表、字段范围和密码是否与加密操作一致。
加密和解密操作都会在列表中保留操作记录,包括处理数据库、数据表、字段、执行设置、状态和创建时间;点击“查看”可查看执行详情。
【截图位置:加密列表页】
【截图位置:新增加密/解密弹窗】
## 13. 通用页面操作
### 13.1 查询和重置
列表页顶部通常提供关键字输入框、“查询”和“重置”按钮。输入关键字后点击“查询”,系统按当前页面支持的字段进行筛选;点击“重置”清空筛选条件并恢复列表。
### 13.2 分页
列表和结果表底部提供分页控件,可以切换当前页、每页条数和前后页。修改每页条数后,系统会重新计算页数。
### 13.3 菜单折叠
点击左侧菜单底部的折叠按钮,可以在完整菜单和仅图标菜单之间切换。菜单折叠不会影响当前页面和正在展示的数据。
## 14. 安全与运维注意事项
- 生产环境操作前必须确认数据源、数据库/Schema 和数据表范围。
- 清表、还原、加密和解密均可能直接改变业务数据,建议先备份并保留操作记录。
- 加密密码不会保存到系统配置中,应通过安全方式单独保管;密码丢失可能导致数据无法解密。
- 备份目录位于后端服务所在机器,部署时应确保目录存在、空间充足且服务账号具有读写权限。
- 数据源密码目前按工具内部方式保存,共享或生产环境部署前应结合实际安全要求采用受保护的凭据管理方案。
- 连接测试失败时,优先检查网络连通性、数据库服务状态、账号权限及数据库客户端依赖。
- AI 生成的规则和 AI 对违规原因的分析仅作为辅助结果,最终规则和处理结论应由具备业务权限的人员确认。
## 15. 常见问题
### 15.1 为什么选择不到 Schema、数据表或字段?
请先确认数据源已启用,并在任务或操作弹窗中完成连接测试。连接测试成功后,系统才会加载 Schema、数据表和字段列表。
### 15.2 为什么扫描结果为空?
可能原因包括:任务尚未配置字段规则、当前表没有不合规数据、筛选字段未展示,或任务连接信息已失效。建议先检查任务配置和数据源测试结果。
### 15.3 为什么加密后无法解密?
请确认使用的是同一数据源、数据库、数据表、字段范围和正确密码。执行解密前建议核对对应的加密操作记录。
### 15.4 清表后如何恢复?
进入“清表”页面,在清表记录中找到对应备份,点击“还原”,确认目标数据库和恢复范围后执行恢复。
### 15.5 为什么导出 Excel 按钮不可用?
当前没有扫描结果时不能导出。请先选择任务并完成扫描;如已扫描但没有不合规数据,系统会提示无需导出。
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* (如 DataQualityView 的「中断查询」按钮) * (如 DataQualityView 的「中断查询」按钮)
*/ */
const BASE = '/api' const BASE = `${import.meta.env.BASE_URL}api`.replace(/\/$/, '')
function errorDetailText(detail) { function errorDetailText(detail) {
if (typeof detail === 'string') return detail if (typeof detail === 'string') return detail
......
...@@ -4,6 +4,7 @@ import { fileURLToPath, URL } from 'node:url' ...@@ -4,6 +4,7 @@ import { fileURLToPath, URL } from 'node:url'
export default defineConfig(({ mode }) => ({ export default defineConfig(({ mode }) => ({
plugins: [vue()], plugins: [vue()],
base: mode === 'production' ? '/db-tool/' : '/',
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)), '@': fileURLToPath(new URL('./src', import.meta.url)),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment