/grant-data-source-permission
给项目生产账号(PRODUCE)授权数据源 SYNC_READ/SYNC_WRITE,是发布到生产的前置条件。 触发场景:发布失败报 DsRead/DsWrite / DATA_SOURCE_AUTH_NO_PERMISSION / 给生产账号授权 / 数据源权限不足 / PublishStatus=0 且 ErrorMessage 含权限报错 / grant-resource-permission / 发布生效校验。 完整流程:get-project-produce-user → grant-resource-permission →
$ npx -y skills add aliyun/alibabacloud-aiops-skills --skill grant-data-source-permission --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/grant-data-source-permission
Context preview
The summary Claude sees to decide when to auto-load this skill.
给项目生产账号(PRODUCE)授权数据源 SYNC_READ/SYNC_WRITE,是发布到生产的前置条件。 触发场景:发布失败报 DsRead/DsWrite / DATA_SOURCE_AUTH_NO_PERMISSION / 给生产账号授权 / 数据源权限不足 / PublishStatus=0 且 ErrorMessage 含权限报错 / grant-resource-permission / 发布生效校验。 完整流程:get-project-produce-user → grant-resource-permission →
SKILL.md
grant-data-source-permission.SKILL.mdname: grant-data-source-permission
description: |-
给项目生产账号(PRODUCE)授权数据源 SYNC_READ/SYNC_WRITE,是发布到生产的前置条件。 触发场景:发布失败报 DsRead/DsWrite / DATA_SOURCE_AUTH_NO_PERMISSION / 给生产账号授权 / 数据源权限不足 / PublishStatus=0 且 ErrorMessage 含权限报错 / grant-resource-permission / 发布生效校验。 完整流程:get-project-produce-user → grant-resource-permission → publish-object-list → list-publish-records(PublishStatus=1) → list-nodes --env PROD(HasProd=true)。 关键限制:effective-end 必须 yyyy-MM-dd HH:mm:ss 字符串;DATASOURCE.RUN 不能授给 PRODUCE 账号(OpenAPI 限制)。 触发词:发布失败、DsRead、DsWrite、DATA_SOURCE_AUTH_NO_PERMISSION、数据源授权、生产账号授权、grant-resource-permission、PublishStatus=0、发布生效校验、PRODUCE 账号。
数据源授权给生产账号 skill
适用场景
- DEV-PROD 模式项目下,集成任务 / 数据库 SQL 任务发布到 PROD 时报:
- `DPN.Pipeline.Validate.DsRead` / `DPN.Pipeline.Validate.DsWrite`(集成任务读/写校验失败)
- `DATA_SOURCE_AUTH_NO_PERMISSION`(数据库 SQL 任务无 RUN 权限)
- 错误 errorData 中含 `accountType: PRODUCE`,意味着**生产账号缺数据源授权**
- 创建数据源后立即给项目生产账号授读写,避免发布失败
背景:发布失败的常见根因
`dev publish-object-list` 接口成功(返回 `Code: OK`)≠ 实际发布成功。发布是**异步**的,权限校验在异步阶段执行。最终结果靠 `list-publish-records` 验真:
aliyun dataphin-public list-publish-records --profile <p> \
--search-filter '{"ProjectIdList":[<projectId>],"Page":1,"PageSize":10}'返回字段 `PublishStatus`:`0=失败 / 1=成功 / 2=发布中`。失败时看 `ErrorMessage` 里的 `errorData`:
// 集成任务示例
{"dsName":"doris01","envEnum":"PROD","dsId":"7456294505155688832","accountType":"PRODUCE"}
// 数据库 SQL 任务示例
{"dsId":"7456294563313908096","dsName":"pg02","operation":"RUN"}之后用 `ops list-nodes --env PROD` 二次确认 `HasProd: false`(即未生成 PROD 节点)。
完整授权流程
TENANT_ID=<tenant-id>
PROJECT_ID=<project-id>
# 1) 取项目生产账号 UserId(仅超管可调)
PRODUCE_USER_ID=$(aliyun dataphin-public get-project-produce-user \
--profile <p> --project-id $PROJECT_ID --output json \
| jq -r '.User.Id')
# => 304214953
# 2) 拿目标 PROD 数据源精确字符串 ID(避免 JS 浮点截断为 ...000)
aliyun dataphin-public list-data-source-with-config --profile <p> \
--search-text "doris01" --output json | jq '.PageResult.DataSourceList[] | {Id,Name,Env}'
# 选 Env=PROD 那条的 Id
# 3) 授权 SYNC_READ + SYNC_WRITE(一次可批量多个数据源 + 多个用户)
aliyun dataphin-public grant-resource-permission --profile <p> \
--resource-type DATASOURCE \
--operate-list '["SYNC_READ","SYNC_WRITE"]' \
--resource-list '[{"ResourceId":"<doris01_PROD_id>"},{"ResourceId":"<pg02_PROD_id>"}]' \
--user-id-list "[\"$PRODUCE_USER_ID\"]" \
--effective-end "3025-12-31 23:59:59" \
--reason "发布前置:授权生产账号读写数据源"
# 4) 验证授权已落库
aliyun dataphin-public list-resource-permissions --profile <p> \
--tab-type DATASOURCE --page 1 --page-size 20 \
--search-text "doris01" --output json \
| jq '.PageResult.RecordList[] | {res:.ResourceInfo.Name, env:.ResourceInfo.Env, account:.TargetAccount.Name, type:.TargetAccount.Type, ops:[.PermissionPeriodList[].PermissionType]}'期望输出:
{ "res":"doris01", "env":"PROD", "account":"<projectName>", "type":"PRODUCE", "ops":["SYNC_READ","SYNC_WRITE"] }关键参数与陷阱
| 字段 | 取值 | 备注 | |---|---|---| | `--resource-type` | `DATASOURCE` | 仅 `TABLE` / `DATASOURCE` 两类(与 `list-resource-permissions --tab-type` 一致) | | `--operate-list` | `["SYNC_READ","SYNC_WRITE"]` | 集成任务读 / 写 | | `--resource-list` | `[{"ResourceId":"<dsId字符串>"}]` | **PROD 环境的数据源 ID**;DEV-PROD 双环境项目下 DEV id 不需要单独授(生产账号只读写 PROD) | | `--user-id-list` | `["<userId>"]` | 生产账号即用 `get-project-produce-user` 返回的 `User.Id` | | `--effective-end` | **`yyyy-MM-dd HH:mm:ss` 字符串** | ⚠ `--help` 写"毫秒时间戳"是错的,传毫秒报 `Invalid effectiveEndTime`。可用 `3025-12-31 23:59:59` 表示长期 |
✗ OpenAPI 不支持的授权(已踩坑)
| 操作 | 报错 | 替代 | |---|---|---| | `DATASOURCE.RUN` 给 PRODUCE 账号 | `DPN.Security.NotSupport: DATASOURCE.RUN不支持` | OpenAPI 暂不开放,需在 **页面** 操作:数据源详情 → 成员&账号 → 给生产账号添加 RUN 权限 | | `effective-end` 传毫秒时间戳(如 `33319785599000`) | `DPN.Commons.InvalidParam: Invalid effectiveEndTime ... valid format: yyyy-MM-dd HH:mm:ss` | 用字符串日期 |
> 验证:实测 `list-resource-permissions` 中历史 `PERSONAL` 账号有 `RUN` 权限,但**不能**通过 OpenAPI 复刻给 PRODUCE 账号——服务端按账号类型分流策略。
重发布并确认生效
# 1) 重新提交(如已有 SubmitId 但发布失败,需重新 submit-pipeline / submit-batch-task)
# 2) publish-object-list
aliyun dataphin-public publish-object-list --profile <p> \
--submit-id-list '[<SubmitId>]' --comment "授权后重发"
# 3) 校验异步结果(关键!)
aliyun dataphin-public list-publish-records --profile <p> \
--search-filter '{"ProjectIdList":[<projectId>],"Page":1,"PageSize":3}' \
| jq '.ListResult.Data[] | {Id,ObjectName,PublishStatus,ErrorMessage:(.ErrorMessage|.[0:200])}'
# PublishStatus="1" 才算真成功
# 4) 终极验证:PROD 节点已生成
aliyun dataphin-public list-nodes --profile <p> --env PROD \
--node-biz-type SCRIPT --schedule-type NORMAL \
--search-text "<task-name>" --page 1 --page-size 5 \
| jq '.PageResult.NodeList[] | {Id,Name,HasProd,HasDev}'
# HasProd=true 即真发布成功相关命令
- `aliyun dataphin-public get-project-produce-user` — 仅超管:获取项目生产账号 UserId
- `aliyun dataphin-public list-resource-permissions --tab-type DATASOURCE` — 查现有数据源授权
- `aliyun dataphin-public revoke-resource-permission` — 回收授权
- `aliyun dataphin-public list-publish-records` — 发布生效校验唯一权威接口
- `aliyun dataphin-public list-nodes --env PROD` — 二次确认 PROD 节点存在
- [create-data-source.md](./create-data-source.md) — DEV-PROD 双环境数据源创建
Read more
name: grant-data-source-permission description: |- 给项目生产账号(PRODUCE)授权数据源 SYNC_READ/SYNC_WRITE,是发布到生产的前置条件。 触发场景:发布失败报 DsRead/DsWrite / DATA_SOURCE_AUTH_NO_PERMISSION / 给生产账号授权 / 数据源权限不足 / PublishStatus=0 且 ErrorMessage 含权限报错 / grant-resource-permission / 发布生效校验。 完整流程:get-project-produce-user → grant-resource-permission → publish-object-list → list-publish-records(PublishStatus=1) → list-nodes --env PROD(HasProd=true)。 关键限制:effective-end 必须 yyyy-MM-dd HH:mm:ss 字符串;DATASOURCE.RUN 不能授给 PRODUCE 账号(OpenAPI 限制)。 触发词:发布失败、DsRead、DsWrite、DATA_SOURCE_AUTH_NO_PERMISSION、数据源授权、生产账号授权、grant-resource-permission、PublishStatus=0、发布生效校验、PRODUCE 账号。
数据源授权给生产账号 skill
适用场景
- DEV-PROD 模式项目下,集成任务 / 数据库 SQL 任务发布到 PROD 时报:
- `DPN.Pipeline.Validate.DsRead` / `DPN.Pipeline.Validate.DsWrite`(集成任务读/写校验失败)
- `DATA_SOURCE_AUTH_NO_PERMISSION`(数据库 SQL 任务无 RUN 权限)
- 错误 errorData 中含 `accountType: PRODUCE`,意味着**生产账号缺数据源授权**
- 创建数据源后立即给项目生产账号授读写,避免发布失败
背景:发布失败的常见根因
`dev publish-object-list` 接口成功(返回 `Code: OK`)≠ 实际发布成功。发布是**异步**的,权限校验在异步阶段执行。最终结果靠 `list-publish-records` 验真:
aliyun dataphin-public list-publish-records --profile <p> \
--search-filter '{"ProjectIdList":[<projectId>],"Page":1,"PageSize":10}'返回字段 `PublishStatus`:`0=失败 / 1=成功 / 2=发布中`。失败时看 `ErrorMessage` 里的 `errorData`:
// 集成任务示例
{"dsName":"doris01","envEnum":"PROD","dsId":"7456294505155688832","accountType":"PRODUCE"}
// 数据库 SQL 任务示例
{"dsId":"7456294563313908096","dsName":"pg02","operation":"RUN"}之后用 `ops list-nodes --env PROD` 二次确认 `HasProd: false`(即未生成 PROD 节点)。
完整授权流程
TENANT_ID=<tenant-id>
PROJECT_ID=<project-id>
# 1) 取项目生产账号 UserId(仅超管可调)
PRODUCE_USER_ID=$(aliyun dataphin-public get-project-produce-user \
--profile <p> --project-id $PROJECT_ID --output json \
| jq -r '.User.Id')
# => 304214953
# 2) 拿目标 PROD 数据源精确字符串 ID(避免 JS 浮点截断为 ...000)
aliyun dataphin-public list-data-source-with-config --profile <p> \
--search-text "doris01" --output json | jq '.PageResult.DataSourceList[] | {Id,Name,Env}'
# 选 Env=PROD 那条的 Id
# 3) 授权 SYNC_READ + SYNC_WRITE(一次可批量多个数据源 + 多个用户)
aliyun dataphin-public grant-resource-permission --profile <p> \
--resource-type DATASOURCE \
--operate-list '["SYNC_READ","SYNC_WRITE"]' \
--resource-list '[{"ResourceId":"<doris01_PROD_id>"},{"ResourceId":"<pg02_PROD_id>"}]' \
--user-id-list "[\"$PRODUCE_USER_ID\"]" \
--effective-end "3025-12-31 23:59:59" \
--reason "发布前置:授权生产账号读写数据源"
# 4) 验证授权已落库
aliyun dataphin-public list-resource-permissions --profile <p> \
--tab-type DATASOURCE --page 1 --page-size 20 \
--search-text "doris01" --output json \
| jq '.PageResult.RecordList[] | {res:.ResourceInfo.Name, env:.ResourceInfo.Env, account:.TargetAccount.Name, type:.TargetAccount.Type, ops:[.PermissionPeriodList[].PermissionType]}'期望输出:
{ "res":"doris01", "env":"PROD", "account":"<projectName>", "type":"PRODUCE", "ops":["SYNC_READ","SYNC_WRITE"] }关键参数与陷阱
| 字段 | 取值 | 备注 | |---|---|---| | `--resource-type` | `DATASOURCE` | 仅 `TABLE` / `DATASOURCE` 两类(与 `list-resource-permissions --tab-type` 一致) | | `--operate-list` | `["SYNC_READ","SYNC_WRITE"]` | 集成任务读 / 写 | | `--resource-list` | `[{"ResourceId":"<dsId字符串>"}]` | **PROD 环境的数据源 ID**;DEV-PROD 双环境项目下 DEV id 不需要单独授(生产账号只读写 PROD) | | `--user-id-list` | `["<userId>"]` | 生产账号即用 `get-project-produce-user` 返回的 `User.Id` | | `--effective-end` | **`yyyy-MM-dd HH:mm:ss` 字符串** | ⚠ `--help` 写"毫秒时间戳"是错的,传毫秒报 `Invalid effectiveEndTime`。可用 `3025-12-31 23:59:59` 表示长期 |
✗ OpenAPI 不支持的授权(已踩坑)
| 操作 | 报错 | 替代 | |---|---|---| | `DATASOURCE.RUN` 给 PRODUCE 账号 | `DPN.Security.NotSupport: DATASOURCE.RUN不支持` | OpenAPI 暂不开放,需在 **页面** 操作:数据源详情 → 成员&账号 → 给生产账号添加 RUN 权限 | | `effective-end` 传毫秒时间戳(如 `33319785599000`) | `DPN.Commons.InvalidParam: Invalid effectiveEndTime ... valid format: yyyy-MM-dd HH:mm:ss` | 用字符串日期 |
> 验证:实测 `list-resource-permissions` 中历史 `PERSONAL` 账号有 `RUN` 权限,但**不能**通过 OpenAPI 复刻给 PRODUCE 账号——服务端按账号类型分流策略。
重发布并确认生效
# 1) 重新提交(如已有 SubmitId 但发布失败,需重新 submit-pipeline / submit-batch-task)
# 2) publish-object-list
aliyun dataphin-public publish-object-list --profile <p> \
--submit-id-list '[<SubmitId>]' --comment "授权后重发"
# 3) 校验异步结果(关键!)
aliyun dataphin-public list-publish-records --profile <p> \
--search-filter '{"ProjectIdList":[<projectId>],"Page":1,"PageSize":3}' \
| jq '.ListResult.Data[] | {Id,ObjectName,PublishStatus,ErrorMessage:(.ErrorMessage|.[0:200])}'
# PublishStatus="1" 才算真成功
# 4) 终极验证:PROD 节点已生成
aliyun dataphin-public list-nodes --profile <p> --env PROD \
--node-biz-type SCRIPT --schedule-type NORMAL \
--search-text "<task-name>" --page 1 --page-size 5 \
| jq '.PageResult.NodeList[] | {Id,Name,HasProd,HasDev}'
# HasProd=true 即真发布成功相关命令
- `aliyun dataphin-public get-project-produce-user` — 仅超管:获取项目生产账号 UserId
- `aliyun dataphin-public list-resource-permissions --tab-type DATASOURCE` — 查现有数据源授权
- `aliyun dataphin-public revoke-resource-permission` — 回收授权
- `aliyun dataphin-public list-publish-records` — 发布生效校验唯一权威接口
- `aliyun dataphin-public list-nodes --env PROD` — 二次确认 PROD 节点存在
- [create-data-source.md](./create-data-source.md) — DEV-PROD 双环境数据源创建
Official Alibaba Cloud Agent Skills collection, providing AI agents with rich Alibaba Cloud product capabilities and general-purpose tooling.
Other skills on alibabacloud-aiops-skills.
- /alibabacloud-agentbay-aio-skills
Execute code in a secure cloud sandbox via AgentBay SDK. Use this skill whenever users request to run, execute, or evaluate code (Python, JavaScript, R, Java), including plotting charts, running scripts, or viewing code output. Covers requests like "run this code", "execute
Open skill - /alibabacloud-agentloop-dataset
Operate Alibaba Cloud AgentLoop Dataset resources with aliyun CLI and the AgentLoop API version 2026-05-20. Use when requests concern AgentLoop datasets, data rows, Dataset schemas, embedding fields, semantic search, ExecuteQuery, AgentSpace data, 数据集, 数据写入, 数据查询, 语义检索, or ask
Open skill - /alibabacloud-agentloop-evaluation
Orchestrate AgentLoop evaluation workflows through the Aliyun CLI plugin with safe previews, saved evaluator and evaluator-skill management, one-shot sample tests, trace or dataset batch runs, polling, and result inspection. Analyze evaluation quality and low-score cases from
Open skill - /alibabacloud-agentloop-experience
Proactively use AgentLoop Recall to retrieve prior Alibaba Cloud AgentLoop experience through the bundled SearchContext CLI whenever the user asks or implies that prior work may help. Trigger for requests to check, search, recall, retrieve, look up, review, consult, reference,
Open skill - /alibabacloud-agentloop-management
AgentLoop APM接入 / AI可观测接入 / 应用监控接入 / 自研探针 / 探针安装. Use for Python aliyun-bootstrap (aliyun-instrument), Java AliyunJavaAgent, Golang instgo, Node.js cms_node_sdk, PHP/.NET OpenTelemetry, ack-onepilot, LicenseKey, AgentLoop workspace agentloop-*. Also for LangChain, Dify,
Open skill - /alibabacloud-avatar-video
Use Alibaba Cloud DashScope API and LingMou to generate AI video and speech. Seven capabilities — (1) LivePortrait talking-head (image + audio → video, two-step), (2) EMO talking-head, (3) AA/AnimateAnyone full-body animation (three-step), (4) T2I text-to-image (Wan 2.x, default
Open skill

