ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DeepSeek 用 Claude Code 重构 Oracle Fusion/SAP 最佳业务实践:Oracle Fusion 安全概述与 RBAC 配置骨架

DeepSeek 用 Claude Code 重构 Oracle Fusion/SAP 最佳业务实践:Oracle Fusion 安全概述与 RBAC 配置骨架 1. 从 Oracle Fusion 安全模型说起为什么 RBAC 骨架值得用 DeepSeek Claude Code 重构Oracle Fusion Cloud Applications Suite 的安全模块是我见过把 RBAC 做到最细的业务系统之一。它把「谁能做什么、能看哪些数据」拆成了四层角色加数据安全策略的组合官方叫纵深防御加职责分离。问题在于这套模型文档散、命名绕尤其是 Abstract Role 和 Job Role 的关系很多人第一次看金字塔图都会误以为存在上下级嵌套。我这次要做的是用 DeepSeek 配合 Claude Code把 Oracle Fusion 的安全概述和 RBAC 配置骨架整理成可复制、可校验、可回滚的工程化片段。适合谁正在做 Oracle Fusion 或 SAP 权限实施、需要快速搭出角色骨架、又不想在安全控制台里反复点鼠标的工程师。核心检索词就三个Oracle Fusion 安全模型、RBAC 角色权限设计、Claude Code 辅助重构。先说结论Oracle Fusion 的 RBAC 不是一棵树而是两条并行的轨道。身份轨道走 Abstract Role业务岗位轨道走 Job Role 到 Duty Role 再到 Privilege。用户最终权限等于身份加岗位的合集。把这个认知固化下来后面的配置骨架才不会搭歪。2. TaoToken 前置统一 Key 与 API 通道让 DeepSeek 和 Claude Code 共用一条入口在动手写配置之前先把模型调用通道理顺。我试过在多个工具里分别填 Key结果就是轮换时到处改容易漏。TaoToken 的做法是给一个统一入口DeepSeek 和 Claude Code 都走同一个 API 通道Key 只维护一份。官网入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。API 基址是 https://taotoken.net/api 注意这个地址不带 UTM 参数直接用于代码里的 base_url。你需要先拿到 Key去控制台的 API Keys 页面创建https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。创建后复制那串以 sk- 开头的字符串后面 settings.json 里要用。如果你主要做长期编码和 Agent 任务Coding Plan 更划算入口在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。模型对话调试用这个https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。注意Key 只存在本地配置文件或环境变量里不要提交到 Git 仓库。下面所有片段里的sk-你的Key都要替换成真实值。3. 可复制配置settings.json 接入片段与 RBAC 角色骨架3.1 settings.json 统一 Key 与 API 通道Claude Code 的配置走 settings.json把 TaoToken 作为统一 provider。下面这段可以直接复制改掉 Key 即可{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key, ANTHROPIC_MODEL: deepseek-chat }, permissions: { allow: [ Read, Write, Bash(git:*) ] } }这里ANTHROPIC_BASE_URL指向 TaoToken 的 API 基址ANTHROPIC_AUTH_TOKEN填你创建的 KeyANTHROPIC_MODEL指定走 DeepSeek 的对话模型。这样 Claude Code 的请求会统一经过 TaoToken 通道DeepSeek 和 Claude 系列模型可以按需切换不用改代码。如果你更习惯用环境变量而不是写进 settings.json等价写法是export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENsk-你的Key export ANTHROPIC_MODELdeepseek-chat两种方式选一种即可settings.json 适合团队共享结构、Key 用占位符环境变量适合本地临时调试。3.2 Oracle Fusion RBAC 角色骨架下面这份骨架把四层角色和数据安全策略用结构化方式表达出来。它不是 Oracle 里的真实导入文件而是给你做设计评审和后续转换用的中间层字段命名对齐 Oracle 安全控制台的概念。# oracle_fusion_rbac_skeleton.yaml role_hierarchy: # 身份轨道通用用户类型与岗位无关 abstract_roles: - name: EMPLOYEE description: 所有正式员工的基础身份 grants: - view_own_payslip - submit_own_expense - apply_own_leave - name: LINE_MANAGER description: 带下属的管理者身份 grants: - approve_subordinate_leave - view_subordinate_goal # 业务岗位轨道Job - Duty - Privilege job_roles: - name: XX_AP_SPECIALIST description: 应付账款专员基于 ORA_AP_SPECIALIST 复制 is_seeded: false source_role: ORA_AP_SPECIALIST duty_roles: - INVOICE_CREATION_DUTY - INVOICE_INQUIRY_DUTY data_security: business_unit: XX_BU_CN ledger: XX_LEDGER_PRIMARY - name: XX_AP_SUPERVISOR description: 应付账款主管含审批职责 is_seeded: false source_role: ORA_AP_SUPERVISOR duty_roles: - INVOICE_CREATION_DUTY - INVOICE_INQUIRY_DUTY - PAYMENT_APPROVAL_DUTY data_security: business_unit: XX_BU_CN ledger: XX_LEDGER_PRIMARY duty_roles: - name: INVOICE_CREATION_DUTY privileges: - create_invoice - edit_invoice_draft - name: INVOICE_INQUIRY_DUTY privileges: - view_invoice - export_invoice_list - name: PAYMENT_APPROVAL_DUTY privileges: - approve_payment - reject_payment sod_matrix: conflicts: - pair: [create_invoice, approve_payment] reason: 凭证录入与付款审批不可同人 - pair: [maintain_supplier, execute_payment] reason: 供应商维护与付款执行不可同人这份骨架的关键点有三个。第一is_seeded: false明确标记自定义角色提醒你不要直接改 ORA_ 开头的预置角色。第二source_role记录复制来源方便升级时对比。第三sod_matrix把互斥权限对单独列出来评审时一眼能看到红线。3.3 用 DeepSeek 生成校验脚本把上面骨架喂给 DeepSeek让它生成一个校验脚本检查是否有用户同时持有互斥权限。提示词可以这样写读取 oracle_fusion_rbac_skeleton.yaml生成一个 Python 脚本 输入是用户到角色的映射 JSON输出是违反 sod_matrix 的用户列表。 要求只依赖标准库输出格式为每行一个冲突描述。DeepSeek 返回的脚本大致长这样我补了注释import json import yaml def load_skeleton(path): with open(path, encodingutf-8) as f: return yaml.safe_load(f) def collect_privileges(user_roles, skeleton): 把用户持有的角色展开成权限集合 privs set() job_map {r[name]: r for r in skeleton[job_roles]} duty_map {d[name]: d for d in skeleton[duty_roles]} for role in user_roles: if role in job_map: for duty in job_map[role][duty_roles]: privs.update(duty_map[duty][privileges]) return privs def check_sod(user_privs, skeleton): conflicts [] for item in skeleton[sod_matrix][conflicts]: a, b item[pair] if a in user_privs and b in user_privs: conflicts.append(f{a} {b}: {item[reason]}) return conflicts if __name__ __main__: skeleton load_skeleton(oracle_fusion_rbac_skeleton.yaml) users json.load(open(users.json, encodingutf-8)) for user, roles in users.items(): privs collect_privileges(roles, skeleton) for c in check_sod(privs, skeleton): print(f[SoD冲突] {user} - {c})users.json格式很简单{ zhangsan: [XX_AP_SPECIALIST, EMPLOYEE], lisi: [XX_AP_SUPERVISOR, LINE_MANAGER] }跑一遍就能看到谁踩了互斥红线。这个脚本不连生产库纯离线校验安全。4. 验证请求与成功结果从模型对话到权限校验4.1 验证 TaoToken 通道是否通先用模型对话页面确认 Key 和通道正常https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。在页面里发一句「你好确认通道正常」能收到回复就说明 Key 有效。命令行验证更直接用 curl 打一次curl -s https://taotoken.net/api/v1/messages \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: deepseek-chat, max_tokens: 64, messages: [{role: user, content: 回复 OK 两个字母}] }成功时返回 JSON 里会有content字段文本是 OK 或类似内容。如果返回 401说明 Key 不对返回 404检查 base_url 是否写成了带路径的完整地址。4.2 验证 RBAC 骨架把 3.3 的脚本和骨架文件放同一目录执行python check_sod.py预期输出为空说明当前用户映射没有互斥冲突。然后手动制造一个冲突把 lisi 的角色改成同时含XX_AP_SPECIALIST和XX_AP_SUPERVISOR再跑一次应该看到[SoD冲突] lisi - create_invoice approve_payment: 凭证录入与付款审批不可同人看到这行就说明校验逻辑生效了。这一步是整个骨架能不能用的分水岭别跳过。4.3 回滚验证动作配置类改动必须能回滚。骨架文件用 Git 管理每次改动前打 taggit add oracle_fusion_rbac_skeleton.yaml git commit -m rbac: 新增 XX_AP_SUPERVISOR 审批职责 git tag rbac-v1.2如果新版本导致校验失败或评审不通过回退到上一个 taggit checkout rbac-v1.1 -- oracle_fusion_rbac_skeleton.yaml python check_sod.py确认回退后校验通过再决定是否重新设计。这套动作在 Oracle 安全控制台里对应的是「复制角色后先不分配验证通过再赋给用户」思路一致。5. 本篇常见错排查5.1 Abstract Role 和 Job Role 到底什么关系这是最高频的困惑。官方金字塔图容易让人以为 Abstract 在 Job 上面、存在继承。实际是两条并行轨道Abstract Role 解决通用身份需求比如员工看工资条、经理批下属请假Job Role 解决岗位专业需求比如应付专员创建发票。用户权限是两者合集不存在谁继承谁。改业务权限时只动 Job 到 Duty 到 Privilege 这条线。5.2 直接改了 ORA_ 预置角色Oracle 升级时预置角色会被覆盖你的改动就丢了。正确做法是复制后加企业前缀比如XX_AP_SPECIALIST并在骨架里用is_seeded: false和source_role记录来源。校验脚本里可以加一条规则任何is_seeded: true的角色不允许出现在用户映射里。5.3 settings.json 里 base_url 写错常见错误是把https://taotoken.net/api写成带/v1/messages的完整路径导致拼接后重复。base_url 只写到/api具体路径由客户端补。另一个错误是 Key 前后带了空格或换行复制时注意。5.4 校验脚本报 yaml 解析错多半是缩进用了 Tab。YAML 只认空格统一用两个空格。另外sod_matrix下的pair是列表写成[a, b]或换行加-都行但别混用。5.5 数据安全策略没生效功能权限对了但用户还能看到别的业务单元数据检查data_security里的business_unit和ledger是否和 Oracle 里配置的数据访问集一致。骨架只是设计层最终要在安全控制台里落地对应的 Data Role。6. 继续往下走把骨架变成可执行的实施动作骨架搭好、校验通过之后下一步是把它映射到 Oracle 安全控制台的实际操作。你可以用 DeepSeek 把 YAML 转成操作清单提示词读取 oracle_fusion_rbac_skeleton.yaml输出一份安全控制台操作步骤清单 按「创建角色 - 添加职责 - 配置数据安全 - 分配用户」排序每步注明对应字段。拿到清单后在测试环境里逐条执行每完成一个角色就跑一次check_sod.py。长期做编码和 Agent 任务的话Coding Plan 入口在这里https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入细节随时查文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。Claude Code 相关配置参考https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。最后留一个我踩过的坑别在 UAT 阶段用超级管理员账号跑全流程测试账号的权限必须和未来真实岗位一致否则 SoD 冲突在上线后才暴露回滚成本极高。骨架和校验脚本提前跑比事后补救省事得多。
返回列表