Install
openclaw skills install test000-my-skill提供 DMS 客户端数据管理能力,包括实例管理、SQL查询、工单创建、团队管理、用户管理。用于用户请求数据库实例添加、数据查询、提交工单、团队配置等操作时调用。
openclaw skills install test000-my-skill本 Skill 提供 DMS(数据管理服务)客户端的自动化操作能力,支持通过 API 调用或 CLI 工具实现实例管理、数据查询、工单创建、团队配置等功能。
本 Skill 支持以下 4 个核心功能场景:
实例登录支持两种方式:
通过 account-list 命令获取数据库账号 ID,然后使用账号 ID 登录,无需密码。
步骤:
# 1. 查询实例账户列表
java -jar dms-cli.jar instance account-list --id <实例ID> --origin <origin值>
# 2. 使用 dbAccountId 登录
java -jar dms-cli.jar instance login \
--id <实例ID> \
--db-account-id <账号ID> \
--origin <origin值>
使用数据库账号和密码登录,需要用户手动提供真实密码,不支持任何默认密码。
命令:
java -jar dms-cli.jar instance login \
--id <实例ID> \
--db-account <数据库账号> \
--password <数据库密码> \
--origin <origin值>
⚠️ 注意:
--password,不是 --db-password错误写法(可能失败):
java -jar dms-cli.jar instance login --id 10413 --db-account root --password "密码"
# origin 使用默认值 5,但实例实际可能是 2
正确写法:
# 先查询实例详情确认 origin 值
java -jar dms-cli.jar instance detail --id 10413
# 查看返回数据中的 "origin" 字段
# 登录时显式指定正确的 origin
java -jar dms-cli.jar instance login --id 10413 --db-account root --password "密码" --origin 2
⚠️ origin 取值:
| origin值 | 来源 | 常见场景 |
|---|---|---|
| 1 | RDS云数据库 | 天翼云RDS |
| 2 | 公网/直连 | 客户端添加的公网实例 |
| 3 | DMS代理 | Agent模式 |
| 4 | AOne环境 | AOne开发环境 |
| 5 | 内网 | 内网数据库(默认) |
⚠️ 重要:即使 controlType=0(弱管控),执行 SQL 仍需要先登录获取 Token!
错误做法:
# 直接执行 SQL,不登录
java -jar dms-cli.jar sql execute --instance-id 10413 --sql "SHOW DATABASES"
# 会报错:"查询弱管控实例Token不能为空"
正确流程:
# 1. 先登录获取 Token
java -jar dms-cli.jar instance login --id 10413 --db-account root --password "密码" --origin 2
# 返回: {"code":200,"data":"26d4540fe7e01ff1",...} -- Token 在 data 字段
# 2. 使用 Token 执行 SQL
java -jar dms-cli.jar sql execute \
--instance-id 10413 \
--sql "SHOW DATABASES" \
--instance-token "26d4540fe7e01ff1" \
--origin 2
问题: database list 命令返回空数组,但实例确实有数据库。
原因: 该 API 对某些实例可能不返回数据。
解决方案: 使用 SQL 直接查询
# 先登录获取 Token
java -jar dms-cli.jar instance login --id 10413 --db-account root --password "密码" --origin 2
# 用 SQL 查询数据库列表
java -jar dms-cli.jar sql execute \
--instance-id 10413 \
--sql "SHOW DATABASES" \
--instance-token "Token值" \
--origin 2
问题: account-list 命令返回空数组,但实例详情显示有 dbAccount: "root"。
解决方案: 直接使用实例详情中的 dbAccount 值登录
# 查询实例详情
java -jar dms-cli.jar instance detail --id 10413
# 找到 "dbAccount": "root"
# 直接使用该账号登录
java -jar dms-cli.jar instance login --id 10413 --db-account root --password "密码" --origin 2
问题: 使用 --database 或 --db-id 参数执行 SQL 时,数据可能写入错误的数据库!
根因分析(已验证):
--database 和 --db-id 参数不会切换数据库连接,只是设置消息体参数⚠️ 验证结果:
# 测试:创建表并插入数据,检查 db_name 列
CREATE TABLE tpcds_verify (id INT, db_name TEXT DEFAULT current_database())
INSERT INTO tpcds_verify (id) VALUES (1)
SELECT * FROM tpcds_verify
# 结果:db_name = "autotest_db_3952484"(错误的数据库!)
# 即使指定了 --database tpcds 和 --db-id 17575
✅ 正确做法:登录时必须使用 --db-name 参数指定目标数据库!
# ❌ 错误做法:登录时不指定数据库,后续无法切换
java -jar dms-cli.jar instance login \
--id 10292 \
--db-account-id 4587 \
--origin 2
# 登录后连接到默认数据库,无法切换!
# ❌ 错误做法:使用 --database 参数尝试切换数据库
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "CREATE TABLE test (id INT)" \
--database tpcds \
--instance-token "xxx" \
--origin 2
# 表仍然创建在默认数据库中!
# ✅ 正确做法:登录时使用 --db-name 参数指定目标数据库(PG需要此参数)
java -jar dms-cli.jar instance login \
--id 10292 \
--db-account-id 4587 \
--origin 2 \
--db-name tpcds
# 现在连接已经绑定到 tpcs 数据库
# 验证当前数据库
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "SELECT current_database()" \
--instance-token "xxx" \
--origin 2
# 应该返回 "tpcds"
完整安全流程(PostgreSQL 专用):
# 步骤1:查询目标数据库的 dbId(可选,用于某些需要 dbId 的操作)
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "SELECT datname, oid FROM pg_database WHERE datistemplate = false" \
--instance-token "xxx" \
--origin 2
# 步骤2:登出当前连接(如果有)
java -jar dms-cli.jar instance logout --token "旧Token"
# 步骤3:重新登录并指定目标数据库
java -jar dms-cli.jar instance login \
--id 10292 \
--db-account-id 4587 \
--origin 2 \
--db-name tpcds
# 返回新的 Token
# 步骤4:验证当前数据库
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "SELECT current_database()" \
--instance-token "新Token" \
--origin 2
# 确认返回 "tpcds"
# 步骤5:执行 SQL(现在可以安全地操作 tpcs 数据库)
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "CREATE TABLE test (id INT PRIMARY KEY)" \
--instance-token "新Token" \
--origin 2 \
--db-type 2
# 步骤6:验证表是否在正确的数据库中
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "SELECT tablename FROM pg_tables WHERE schemaname = 'public'" \
--instance-token "新Token" \
--origin 2
⚠️ 不同数据库类型的处理方式:
| 数据库类型 | dbType | 切换数据库方式 | 关键参数 |
|---|---|---|---|
| MySQL | 1 | --database 参数有效 | 登录后可用 USE database |
| PostgreSQL | 2 | 必须登录时指定 | --db-name 在登录时 |
| SQL Server | 6 | --database 参数有效 | 登录后可用 USE database |
| MongoDB/DDS | 9 | --database 参数有效 | 连接字符串指定 |
⚠️ PostgreSQL 特殊说明:
--db-name 参数只在 instance login 命令中有效--db-id 和 --schema-id 参数用于 schema 级别操作,不切换数据库| 值 | 枚举名 | 中文说明 | 英文说明 |
|---|---|---|---|
| 1 | RDS | 云数据库/天翼云数据库 | Cloud Database |
| 2 | PUBLIC | 公网/直连数据库 | Public Network/Direct Connection Database |
| 3 | AGENT | DMS代理数据库 | DMS Proxy Database |
| 4 | AONE | AOne环境数据库 | AOne Environment Database |
| 5 | INTRANET | 内网数据库 | Intranet Database |
| 值 | 枚举名 | 中文说明 |
|---|---|---|
| 1 | MYSQL | MySQL |
| 2 | PGSQL | PostgreSQL |
| 3 | ADB | TeleDB For AnalyticDB |
| 4 | GPSQL | Greenplum |
| 5 | TELEDBX | TeleDB for Xscale |
| 6 | SQLSERVER | SQL Server |
| 7 | DRDS | DRDS |
| 8 | MONGO | MongoDB |
| 9 | DDS | DDS |
| 10 | HIVE | Hive |
| 11 | ORACLE | Oracle |
| 12 | DAMENG | 达梦 |
| 13 | CLICKHOUSE | ClickHouse |
| 14 | TIDB | TiDB |
| 值 | 枚举名 | 中文说明 | 英文说明 |
|---|---|---|---|
| 1 | DEV | 开发 | develop |
| 2 | BETA | 测试 | beta |
| 3 | PRE | 预发 | pre-product |
| 4 | PRO | 生产 | product |
| 值 | 枚举名 | 中文说明 | 英文说明 |
|---|---|---|---|
| 1 | DEFAULT | 正常 | Normal |
| 2 | ERROR | 异常 | Exception |
| 3 | DISABLE | 禁用 | Disabled |
| 值 | 枚举名 | 中文说明 |
|---|---|---|
| 0 | READONLY | 只读 |
| 1 | RW | 读写 |
| 值 | 枚举名 | 中文说明 | 英文说明 |
|---|---|---|---|
| 1 | WEB | Web模式 | Web Mode |
| 2 | CLIENT | Client模式 | Client Mode |
| 值 | 枚举名 | 中文说明 |
|---|---|---|
| 0 | WEAK_CONTROL_TYPE | 弱管控模式 |
| 1 | STRONG_CONTROL_TYPE | 强管控模式 |
⚠️ 说明:
| 值 | 中文说明 |
|---|---|
| export | 数据导出工单 |
| import | 数据导入工单 |
| sql | SQL变更工单 |
| query | SQL查询工单 |
| sqlreview | SQL评审工单 |
| 值 | 中文说明 |
|---|---|
| 0 | 待提交 |
| 1 | 审批中 |
| 2 | 审批通过 |
| 3 | 审批拒绝 |
| 4 | 执行中 |
| 5 | 执行成功 |
| 6 | 执行失败 |
| 7 | 已撤回 |
| 8 | 已关闭 |
| 值 | 枚举名 | 中文说明 |
|---|---|---|
| 1 | ADMIN | 管理员 |
| 2 | MEMBER | 普通成员 |
| 5 | READONLY | 只读 |
| 值 | 中文说明 |
|---|---|
| 0 | 未登录 |
| 1 | 已登录 |
cd dms-data-management-java
mvn clean package
java -jar target/dms-cli-1.0.0.jar <command>
java -jar dms-cli.jar instance create \
--alias "测试数据库" \
--host 127.0.0.1 \
--port 3306 \
--user root \
--password "your_password" \
--type mysql
# 基本修改
java -jar dms-cli.jar instance modify --id 123 --alias "新名称"
java -jar dms-cli.jar instance modify --id 123 --host 192.168.1.1 --port 3307
# 将实例添加到团队(重要:需要先通过 instance detail 获取 origin 值)
java -jar dms-cli.jar instance modify --id <实例ID> --team-id <团队ID> --origin <origin值>
# origin值说明:
# 1 = RDS (云数据库)
# 2 = PUBLIC (公网/直连)
# 3 = AGENT (DMS代理)
# 4 = AONE (AOne环境)
# 5 = INTRANET (内网)
java -jar dms-cli.jar instance delete --id 123
java -jar dms-cli.jar instance detail --id 123
# 返回示例:
# {"code":200,"data":{..., "id":"10413", "origin":2, "controlType":0, "dbAccount":"root", ...}}
java -jar dms-cli.jar instance list --page 1 --page-size 10
java -jar dms-cli.jar instance test \
--host 127.0.0.1 \
--port 3306 \
--user root \
--password "password" \
--type mysql
# type可选值:mysql(1), pgsql(2), sqlserver(6), mongo(8), doris(3), etc.
实例登录支持两种方式:
方式一:使用 dbAccountId 登录(推荐)
# 查询账户列表
java -jar dms-cli.jar instance account-list --id <实例ID> --origin <origin值>
# 使用 dbAccountId 登录(无需密码)
java -jar dms-cli.jar instance login \
--id <实例ID> \
--db-account-id <账号ID> \
--origin <origin值>
方式二:使用账密登录
# ⚠️ 必须指定正确的 origin 值(从实例详情获取)
# ⚠️ 密码需要用户手动提供,不支持默认密码
java -jar dms-cli.jar instance login \
--id <实例ID> \
--db-account <数据库账号> \
--password <数据库密码> \
--origin <origin值>
登出
java -jar dms-cli.jar instance logout --token "instance_token"
java -jar dms-cli.jar instance add-to-team --id 123 --team-id 456
java -jar dms-cli.jar user list --page 1 --page-size 10
java -jar dms-cli.jar user detail --id 123
java -jar dms-cli.jar user add --email "user@example.com" --captcha "123456"
java -jar dms-cli.jar user delete --id 123
java -jar dms-cli.jar user delete --id 123 --tenant-id 456
java -jar dms-cli.jar user modify --id 123 --comment "用户备注"
java -jar dms-cli.jar team create --name "数据分析团队" --desc "团队描述" --manager-ids "42"
java -jar dms-cli.jar team find --name "数据分析团队"
# 返回: {"id":"123","teamName":"数据分析团队","memberCount":1,...}
# Agent可以通过此命令获取团队ID
# role取值说明:
# 1 = 管理员 (ADMIN)
# 2 = 普通成员 (MEMBER)
# 5 = 只读 (READONLY)
java -jar dms-cli.jar team add-member --team-id 123 --user-id "405" --role 2
java -jar dms-cli.jar team modify --id 123 --name "新团队名"
java -jar dms-cli.jar team delete --id 123
java -jar dms-cli.jar team detail --id 123
java -jar dms-cli.jar team list --page 1 --page-size 10
java -jar dms-cli.jar team my
# 导出工单 (type=export)
java -jar dms-cli.jar workorder create \
--type export \
--instance-id 123 \
--database "db_name" \
--table "table_name"
# 导入工单 (type=import)
java -jar dms-cli.jar workorder create \
--type import \
--instance-id 123 \
--database "db_name"
# SQL变更工单 (type=sql)
java -jar dms-cli.jar workorder create \
--type sql \
--instance-id 123 \
--sql "UPDATE table SET column='value' WHERE id=1"
java -jar dms-cli.jar workorder detail --id 123
# 支持 status 参数过滤
# status取值:
# 0=待提交, 1=审批中, 2=审批通过, 3=审批拒绝
# 4=执行中, 5=执行成功, 6=执行失败, 7=已撤回, 8=已关闭
java -jar dms-cli.jar workorder list --page 1 --page-size 10
java -jar dms-cli.jar workorder list --status 1
java -jar dms-cli.jar workorder withdraw --id 123
java -jar dms-cli.jar workorder retry --id 123
# ⚠️ 注意:可能返回空数组,建议使用 SQL 查询
java -jar dms-cli.jar database list --instance-id 123
# 分页查询
java -jar dms-cli.jar database page-list --instance-id 123 --page 1 --page-size 20
⚠️ 重要:执行 SQL 前必须先登录获取 Token!
查询实例详情,获取关键信息
java -jar dms-cli.jar instance detail --id <实例ID>
# 记录 origin, dbAccount, controlType
登录实例获取 Token
方式一:使用 dbAccountId 登录(推荐)
# 查询账户列表获取 dbAccountId
java -jar dms-cli.jar instance account-list --id <实例ID> --origin <origin值>
# 使用 dbAccountId 登录
java -jar dms-cli.jar instance login \
--id <实例ID> \
--db-account-id <账号ID> \
--origin <origin值>
方式二:使用账密登录
# ⚠️ 参数是 --password,不是 --db-password
# ⚠️ 必须指定正确的 --origin 值
# ⚠️ 密码需要用户手动提供
java -jar dms-cli.jar instance login \
--id <实例ID> \
--db-account <数据库账号> \
--password <数据库密码> \
--origin <origin值>
⚠️ 验证当前数据库(关键步骤!)
# MySQL/PostgreSQL 验证当前数据库
java -jar dms-cli.jar sql execute \
--instance-id <实例ID> \
--sql "SELECT current_database()" \
--instance-token <Token> \
--origin <origin值>
# 确认返回的数据库名称是否为目标数据库!
# 如果不匹配,需要使用 --db-id 参数或重新登录
执行 SQL
# 基本执行
java -jar dms-cli.jar sql execute \
--instance-id <实例ID> \
--sql "SELECT * FROM table_name" \
--instance-token <登录获取的Token> \
--origin <origin值>
# PostgreSQL 必须使用 db-id 参数
java -jar dms-cli.jar sql execute \
--instance-id <实例ID> \
--sql "CREATE TABLE test (id INT)" \
--database <数据库名> \
--db-id <数据库ID> \
--schema-id <SchemaID> \
--db-type 2 \
--instance-token <Token> \
--origin <origin值>
⚠️ 执行后验证数据是否写入正确的数据库
java -jar dms-cli.jar sql execute \
--instance-id <实例ID> \
--sql "SELECT current_database(), table_name FROM information_schema.tables WHERE table_schema = 'public'" \
--database <数据库名> \
--instance-token <Token> \
--origin <origin值>
# 1. 登录获取 Token
java -jar dms-cli.jar instance login \
--id 10413 \
--db-account root \
--password "DIEVU-k7eNxR" \
--origin 2
# 返回: {"code":200,"data":"26d4540fe7e01ff1",...}
# 2. ⚠️ 验证当前数据库
java -jar dms-cli.jar sql execute \
--instance-id 10413 \
--sql "SELECT database()" \
--instance-token "26d4540fe7e01ff1" \
--origin 2
# 确认返回的数据库名称是否正确!
# 3. 使用 Token 查询数据库列表
java -jar dms-cli.jar sql execute \
--instance-id 10413 \
--sql "SHOW DATABASES" \
--instance-token "26d4540fe7e01ff1" \
--origin 2
# 4. 在指定数据库执行 SQL(先验证数据库)
java -jar dms-cli.jar sql execute \
--instance-id 10413 \
--sql "SHOW TABLES" \
--database "dms_console" \
--instance-token "26d4540fe7e01ff1" \
--origin 2
# 5. PostgreSQL 示例(必须使用 db-id 和 schema-id)
# 先查询数据库 ID
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "SELECT datname, oid FROM pg_database WHERE datistemplate = false" \
--instance-token "xxx" \
--origin 2
# 使用 db-id 执行 SQL
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "CREATE TABLE test (id INT PRIMARY KEY)" \
--database tpcds \
--db-id 17575 \
--schema-id 4239 \
--db-type 2 \
--instance-token "xxx" \
--origin 2
# 验证表是否创建在正确的数据库
java -jar dms-cli.jar sql execute \
--instance-id 10292 \
--sql "SELECT current_database(), tablename FROM pg_tables WHERE schemaname = 'public'" \
--database tpcds \
--db-id 17575 \
--instance-token "xxx" \
--origin 2
配置文件 config.json 需要包含以下内容:
{
"base_url": "https://localhost:8091",
"ws_url": "wss://localhost:8091/cloud/ws/sqlConsole/query",
"tokens": ["token1", "token2"],
"headers": {
"Accept": "application/json, text/plain, */*",
"Accept-Language": "zh-CN",
"Content-Type": "application/json",
"From-Client": "true",
"User-Agent": "Mozilla/5.0..."
},
"cookies": {
"Authorization-jwt": "your_jwt_token",
"XSRF-TOKEN": "your_xsrf_token",
"Authorization-jwt-local": "your_local_token"
},
"xsrf_token": "your_xsrf_token",
"verify": false
}
| 功能 | 方法 | 接口 | 说明 |
|---|---|---|---|
| 创建实例 | POST | /cloud/meta/instance/create | 创建新的数据库实例 |
| 修改实例 | POST | /cloud/meta/instance/modify | 修改实例信息,支持添加实例到团队 |
| 删除实例 | POST | /cloud/meta/instance/delete | 删除指定实例 |
| 实例详情 | POST | /cloud/meta/instance/detail | 获取实例详细信息 |
| 实例列表 | POST | /cloud/meta/instance/pageList | 分页查询实例列表 |
| 测试连接 | POST | /cloud/meta/instance/testConnection | 测试实例连接是否正常 |
| 登录实例 | POST | /cloud/meta/instance/login | 登录到指定实例 |
| 登出实例 | POST | /cloud/meta/instance/logout | 登出实例 |
| 添加实例到团队 | POST | /cloud/meta/instance/modify | 通过修改接口的 --team-id 参数添加 |
| 功能 | 方法 | 接口 | 说明 |
|---|---|---|---|
| 用户登录 | POST | /cloud/dmsUser/userLogin | DMS 用户登录 |
| 用户登出 | POST | /cloud/dmsUser/userLogout | DMS 用户登出 |
| 添加用户 | POST | /cloud/dmsUser/joinTenant | 添加用户到组织 |
| 删除用户 | POST | /cloud/dmsUser/exitTenant | 从组织删除用户 |
| 用户列表 | POST | /cloud/dmsUser/pageList | 分页查询用户列表 |
| 用户详情 | POST | /cloud/dmsUser/detail | 获取用户详细信息 |
| 修改用户 | POST | /cloud/dmsUser/modify | 修改用户信息 |
| 创建团队 | POST | /cloud/team/create | 创建新的团队 |
| 添加团队成员 | POST | /cloud/team/member/create | 将用户添加到团队 |
| 修改团队 | POST | /cloud/team/modify | 修改团队信息 |
| 删除团队 | POST | /cloud/team/delete | 删除指定团队 |
| 团队详情 | POST | /cloud/team/detail | 获取团队详细信息 |
| 团队列表 | POST | /cloud/team/pageList | 分页查询团队列表 |
| 按名称查找团队 | - | team find 命令 | 遍历列表查找指定名称的团队 |
| 功能 | 方法 | 接口 | 说明 |
|---|---|---|---|
| 创建工单 | POST | /cloud/workOrder/create | 创建新的工单 |
| 工单详情 | POST | /cloud/workOrder/detail | 获取工单详情 |
| 工单列表 | POST | /cloud/workOrder/pageList | 分页查询工单列表 |
| 撤回工单 | POST | /cloud/workOrder/withdraw | 撤回指定工单 |
| 重试工单 | POST | /cloud/workOrder/retry | 重试失败的工单 |
当用户要求创建团队、邀请用户加入、将实例添加到团队时,使用以下流程:
步骤1:创建团队
java -jar dms-cli.jar team create --name "团队名称" --desc "描述" --manager-ids "42"
# 返回 {"code":200,"data":"SUCCESS"}
步骤2:查找新团队ID(因为创建返回无ID)
java -jar dms-cli.jar team find --name "团队名称"
# 返回团队详情,包含 id
步骤3:添加成员
# role: 1=管理员, 2=普通成员, 5=只读
java -jar dms-cli.jar team add-member --team-id <团队ID> --user-id <用户ID> --role 2
步骤4:查找实例ID和origin(从instance detail获取)
java -jar dms-cli.jar instance detail --id <实例ID>
# 从返回数据中找到 id, origin 字段
步骤5:将实例添加到团队
java -jar dms-cli.jar instance modify --id <实例ID> --team-id <团队ID> --origin <origin值>
⚠️ 请参考上方"数据库查询命令"部分的完整流程
cookies 传递DMS-FRONT@2023#*