
前言不管什么业务系统无论是通用业务软件还是行业业务软件都会有安全模块。业务系统的安全其实非常复杂在开发第一件事情就是去学习 安全领域知识。我把目光放在了全球顶级的业务系统oracle fusion cloud applications suite。当前我基本快完成了 复刻oracle fusion cloud applications suite 安全模块的任务。DeepSeek成本极其低廉利用适当的软件工程知识完全可以取得很高的投资回报。详细介绍Oracle Fusion Cloud Applications Suite 安全的数据安全策略包括使用实施等。在 Oracle Fusion Cloud Applications Suite 中数据安全策略Data Security Policies, DSP决定了用户在通过功能安全进入某个页面后具体能够看到哪些数据、对哪些数据行Rows拥有操作特权。如果说“功能安全”控制的是界面的按钮与菜单What you can do那么“数据安全”控制的就是底层的数据行边界What you can see。一、 数据安全策略的核心架构与底层原理Oracle Fusion 的数据安全采用“基于实例集”的设计理念其底层核心逻辑可以简化为谁Grantee被允许对什么范围的数据Data Instance Set执行什么操作Actions/Instance Methods。1. 核心三要素角色Grantee通常是 Job Role 或 Duty Role如财务经理、HR 专员。数据对象Database Object / Resource数据库中的物理表或逻辑视图如发票表 AP_INVOICES_ALL员工表 PER_ALL_PEOPLE_F。数据实例/集Instance Set / Condition利用 SQL 谓词Where 条件限制的数据集合。例如WHERE bu_id 300000001234仅限 A 业务实体。2. 底层核心数据表数据安全策略的运行时拦截和配置存储在以下FND 共通安全表中FND_OBJECTS注册受保护的数据对象如 PER_ALL_PEOPLE_F。FND_OBJECT_INSTANCE_SETS定义动态或静态的 SQL 过滤条件Condition。FND_GRANTS核心授权表。将角色、对象、实例集和操作Actions显式绑定在一起。当用户登录时系统会自动解析该表并拼接 SQL 谓词。二、 数据安全策略的实施与配置方法在实施 Oracle Fusion 时配置数据安全策略主要通过以下两种完全不同的技术路径完成具体取决于模块架构方法 A基于 HCM 安全配置文件HCM Security Profiles—— 最常用在人力资本管理HCM模块中Oracle 将底层的 FND_GRANTS 抽象成了对业务顾问极度友好的图形化界面定义配置文件进入“管理人员安全配置文件Manage Person Security Profiles”或“组织安全配置文件”。设定限制条件选择控制维度如按部门、按职位层级、或使用 “View All People” 释放全局权限。绑定基准角色Generate Data Role进入 “Assign Security Profiles to Role” 任务将 Job Role如 Line Manager与刚刚定义的 Security Profile 绑定。系统自动编译系统在后台会自动运行 LDAP 同步进程自动在 FND_GRANTS 中生成底层的 SQL 谓词映射。方法 B基于 ERP/SCM 的业务实体Business Unit / Ledger控制在财务ERP和供应链SCM中数据安全通常与组织架构Enterprise Structure硬绑定数据访问集Data Access Sets控制总账GL中用户能访问哪些账簿Ledger或平衡段值Legal Entities。通过“用户数据访问Manage User Data Access”任务实施选择用户与绑定的 Job Role如 Accounts Payable Specialist。选择安全维度Security Context例如Business Unit。选择具体的安全值Security Value例如US1 Business Unit。底层效果该用户在进入“发票查询”页面时系统底层的 SQL 引擎会自动追加类似 AND org_id [US1_BU_ID] 的安全过滤从根本上隔离了其他 BU 的财务数据。三、 高级实施自定义数据安全策略Custom DSP当预设的Seeded数据安全策略无法满足企业特殊的合规需求时例如项目经理只能看到自己名下项目的财务报销单据安全管理员需要在安全控制台进行扩展实施步骤登录安全控制台Security Console找到目标Duty Role通常建议在 Duty 级别控制数据安全而不是直接修改 Job Role。切换到Data Security Policies标签页点击Create Data Security Policy。选择数据库对象Database Object指定要保护的表如 PO_HEADERS_ALL。定义条件Condition可以选择预设的条件或点击 New Condition 编写自定义 SQL 谓词。示例TABLE_ALIAS.created_by :NUMBER_PRINCIPAL_ID实现只能看自己创建的数据。指定动作Actions勾选对该数据集允许的操作如 Read、Update。四、 性能与排错最佳实践Best Practices由于数据安全策略是在运行时Runtime动态修改 SQL 语句并注入到数据库执行的设计或实施不当会引发严重的性能灾难Performance Bottleneck或权限漏洞。避免使用高能耗的 SQL 谓词在自定义 Condition 时尽量避免在 WHERE 条件中使用复杂的 EXISTS 子查询或未建立索引的字段。这会导致全表扫描使前端页面加载出现极长的白屏Timeout。必须运行的关键基础进程在通过 HDL 导入用户、或者手工分配了 Data Access 之后必须前往“排程进程Scheduled Processes”提交以下基础作业否则新配置的数据安全策略不会在前端生效Retrieve Latest LDAP Changes获取最新的 LDAP 变更Import User and Role Application Security Data导入用户和角色应用安全数据诊断安全问题如果某个用户反映“看不到某些数据”实施顾问可以使用拥有运行报表权限的账号在BI Publisher中直接模拟该用户的安全上下文或者联查 FND_GRANTS 表确认底层数据授权是否成功生成。如果您当前正处于项目实施阶段您可以告诉我您目前是在配置HCM员工/薪酬、ERP财务/BU还是自定义模块的数据安全您的业务部门提出了什么样的特殊数据隔离需求例如跨法人实体限制、或者是极其复杂的条件过滤我可以为您提供具体的底层配置逻辑或对应的 HDL 批量导入模板。如果还在实施security console,如何考虑数据安全策略的实施即实施阶段还没有到和业务财务HRUX绑定的节点在项目实施的纯 Security Console 配置阶段即业务组织架构、HR 员工、财务账簿尚未在系统中完全建立的真空期数据安全策略的实施重点应放在“顶层架构设计”、“角色模型克隆Clone”以及“技术特权账号生命周期管理”上。在这个节点你不需要关注具体的业务数据安全配置如配置某个 BU 或某条组织链而是要为未来的业务落地搭好“安全的容器”。以下是具体的实施考虑和落地步骤一、 核心策略剥离与克隆CloneOracle 官方的最佳实践严禁直接将 Seeded系统自带的 Job Role 分配给最终用户。在 Security Console 阶段你的核心任务是建立企业自己的角色标准库。1. 识别并分离“纯技术角色”与“业务角色”技术角色现在就可以定型如 IT Security Manager、Application Implementation Consultant。这些角色不需要绑定未来的财务、HR 组织架构。业务角色现在只建容器如 Accounts Payable Manager。现在不需要配置它的业务数据安全Data Access但要在 Security Console 中将其克隆为自定义角色如 XX_ACCOUNTS_PAYABLE_MANAGER_JOB。2. 自定义角色的克隆原则只克隆 Job Role 和 Duty Role在 Security Console 中使用 Copy Role 功能。选择Copy top role and inherit segregate privileges。保留 Aggregate Privileges (AP)正如我们在第一个问题中讨论的AP 是高内聚的“原子特权”。克隆时让你的自定义角色直接继承原生的 AP千万不要去拆解或修改 AP 内部的数据条件。二、 实施阶段的“技术特权”管理无业务数据期的安全由于此时没有 HR 员工数据实施人员使用的都是“实施用户Implementation Users / 技术账号”。这些账号不受任何业务数据策略限制权力极大必须在安全控制台做好控制。1. 严格控制全局最高特权角色在没有跟业务绑定前实施顾问最喜欢滥用Application Implementation Consultant (AIC)角色。风险AIC 拥有系统全局所有模块的配置和全量数据读写权View All。实施动作在 Security Console 中建立特权账号申请与审批台账。AIC 角色只能分配给各个模块的首席顾问且必须设定失效日期Expiration Date。2. 在安全控制台预设“密码与锁定策略”在与业务绑定前先在 Security Console 的Administration标签页中把企业的安全红线合规基线配好密码复杂度设置长度、特殊字符、历史密码不可重复次数。防暴力破解设置密码错误 5 次自动锁定账号 30 分钟。通知模板配置好用户被创建、密码被重置时发出的全局邮件模板可在未对接正式邮件服务器前先完成文本设计。三、 为未来的“数据安全绑定”预留技术接口虽然现在没有业务数据但为了防止未来业务上线时权限架构崩塌必须在 Security Console 里做好以下技术预留1. 梳理自定义 Duty Role 的数据安全策略 (DSP)如果在实施早期业务部门已经提出了超越标准系统的特殊隔离需求例如华东区的审计员只能审计华东区的单据而系统标准只有按 BU 隔离你现在就需要做在 Security Console 中找到对应的自定义 Duty Role。进入Data Security Policies查看系统自带的 FND_OBJECTS 谓词。技术预留编写好未来需要用到的自定义 SQL 谓词Condition草稿保存在实施设计文档中等待业务表单数据灌入后进行测试。2. 规划“岗位-角色”映射矩阵SPR Matrix在安全控制台阶段开始同步编制Security Promotion Matrix安全矩阵表纵轴未来的业务岗位如北京分公司财务专员。横轴在 Security Console 中已经克隆好的自定义 Job Role如XX_AP_SPECIALIST_JOB。数据安全映射列预留项在矩阵中留出一列叫Expected Data Context。写明这个岗位未来在系统上线时应该在外部如“管理用户数据访问”或“HCM安全配置文件”中被塞入什么业务值。总结当前节点的交付物如果在当前的纯 Security Console 阶段收尾你的数据安全实施交付物不应该是系统里的配置结果而应该是以下技术资产《企业自定义角色命名规范与清单》全部在 Security Console 中 Clone 完毕并带 XX_ 前缀。《全局安全控制台安全策略配置基线》密码、锁定、LDAP 同步频率。《特权实施账号阶段性回收计划》AIC 等高危账号的清理时间表。如果您需要我可以为您提供一份标准的《实施阶段特权账号AIC/安全经理安全管理与审计复核表》帮助您在项目早期规避安全合规风险。您目前负责的是哪几个核心模块如只有ERP还是包含HCM、SCM等全套的早期安全规划在security console中在定制角色的时候是不是需要定义数据安全策略不一定这取决于你克隆/定制角色的类型以及你的定制目的。在安全控制台Security Console定制角色时关于是否需要定义数据安全策略Data Security Policies, DSP可以分为以下三种具体情况1. 绝大多数情况不需要由系统自动或后续业务节点处理如果你只是在做标准的作业角色Job Role定制你在 Security Console 里不需要去手动创建或修改数据安全策略。原因当你在 Security Console 中使用 Copy Role 克隆一个 Job Role例如从 Accounts Payable Manager 克隆为 XX_AP_MANAGER并选择Copy top role时新角色会自动继承原角色所包含的所有底层数据安全策略Data Security Policies。后续如何绑定数据这些继承下来的策略通常是“参数化”的。具体的业务数据边界比如这个角色到底能看 A 业务实体还是 B 业务实体不需要在 Security Console 里配置而是等项目到了业务绑定节点后通过“管理用户数据访问”Manage User Data Access或“HCM安全配置文件”HCM Security Profiles动态注入。2. 只有一种情况绝对需要打破系统标准隔离逻辑只有当企业提出了非常极端的、打破 Oracle 标准产品逻辑的数据隔离需求时你才必须在 Security Console 定制角色时定义数据安全策略。举个例子系统标准的采购员角色默认数据安全策略是“按业务实体Business Unit隔离”。特殊需求业务部门要求“采购员不仅能看到自己 BU 的数据还必须能看到他自己创建的Created By 自己跨 BU 的所有历史采购单”。实施动作此时标准的功能和数据绑定失效了。你必须在 Security Console 中找到对应的Duty Role进入Data Security Policies标签页点击Create Data Security Policy手动选择底层数据库对象如 PO_HEADERS_ALL并手写 SQL 谓词条件如 TABLE_ALIAS.created_by :NUMBER_PRINCIPAL_ID。3. 一种特殊角色必须保持“干净”技术管理类角色如果像你之前提到的你正在定制的是IT Security ManagerIT 安全经理或Application Implementation Consultant实施顾问这种纯技术、纯管理类的 Job Role实施原则绝对不要去给它们定义或添加数据安全策略。原因这些角色需要的是全局的、技术性的功能操作权限Function Privileges它们在底层几乎没有、也不应该有任何业务数据安全策略DSP。给它们手动加 DSP 不仅无法限制其技术特权反而容易导致安全控制台的 LDAP 索引同步报错。️ 实施阶段的避坑指南Best Practice在当前纯 Security Console 实施阶段如果你需要新建一个自定义角色最稳妥的步骤是只做复制Copy和继承Inherit在 Security Console 里只负责克隆出 XX_ 前缀的 Job Role。检查 DSP 列表进入新角色的配置界面确认Data Security Policies标签页里有系统自动带过来的、由 ORA_ 或 FND_ 开头的标准策略行这就代表“容器”已经准备好了。保持原样直接保存不要点击 “Create Data Security Policy” 去添加自定义行直接点击 Save and Close。把数据限权的悬念留到未来的业务配置节点。如果你现在正在 Security Console 界面中尝试给某个特定的角色做调整你可以告诉我这个角色的名称/代码是什么业务部门目前是否已经向你提出了某些明确的数据隔离想法例如某个岗位只能看特定类别的数据我们可以一起评估这个需求到底属于“情况 1”未来在业务节点配还是“情况 2”现在必须在 Security Console 里手写 SQL 谓词。