最近在看 SAP 权限角色的时候,经常会遇到一个很典型的现场问题。一个业务用户只是想执行某个看似很普通的事务码,PFCG 里却被带出一串授权对象,有的对象来自当前业务模块,有的对象看起来甚至像是其他模块的影子。角色管理员为了让程序跑起来,只能不断补权限,补着补着,角色就变胖了。再过几轮项目变更,谁也说不清这些权限到底是业务真正需要,还是某个历史报错之后临时加进去的。这类问题背后,往往不是单纯的 PFCG 操作问题,而是 SU24 里的授权默认值和 Check Indicator 没有被认真治理。SAP 的事务码执行过程并不总是单线条的。一个事务码背后可能调用函数模块、类方法、报表、子程序、业务对象、后台例程,也可能间接触发其他应用组件的逻辑。只要被调用的代码里写了AUTHORITY-CHECK,运行时就有可能做授权检查。结果就是,一个 PA 报表在执行过程中调用了 HR 相关例程,用户虽然只是从 PA 入口进来,却被要求具备 HR 授权。系统从技术上看没有错,因为代码确实检查了 HR 对象。但从权限设计角度看,这可能不是一个好结果,因为 PA 用户并不一定应该被授予一堆 HR 权限。授权检查范围不是越大越安全很多项目一开始会把授权检查理解成越多越安全。这个判断只对了一半。授权检查过少当然有风险,但授权检查过多也会制造另一种风险。为了让业务继续运行,管理员可能被迫给出更宽的权限值,甚至直接给某些字段维护*。从审计角度看,这比一开始就明确控制检查范围更难解释。Profile Generator 的目标是根据菜单、事务码、应用入口和授权默认值,自动生成比较合理的授权数据。PFCG 在生成角色权限时
SAP 授权检查范围怎么收窄,SU24 背后的 Profile Generator 逻辑
最近在看 SAP 权限角色的时候,经常会遇到一个很典型的现场问题。一个业务用户只是想执行某个看似很普通的事务码,PFCG 里却被带出一串授权对象,有的对象来自当前业务模块,有的对象看起来甚至像是其他模块的影子。角色管理员为了让程序跑起来,只能不断补权限,补着补着,角色就变胖了。再过几轮项目变更,谁也说不清这些权限到底是业务真正需要,还是某个历史报错之后临时加进去的。这类问题背后,往往不是单纯的 PFCG 操作问题,而是 SU24 里的授权默认值和 Check Indicator 没有被认真治理。SAP 的事务码执行过程并不总是单线条的。一个事务码背后可能调用函数模块、类方法、报表、子程序、业务对象、后台例程,也可能间接触发其他应用组件的逻辑。只要被调用的代码里写了AUTHORITY-CHECK,运行时就有可能做授权检查。结果就是,一个 PA 报表在执行过程中调用了 HR 相关例程,用户虽然只是从 PA 入口进来,却被要求具备 HR 授权。系统从技术上看没有错,因为代码确实检查了 HR 对象。但从权限设计角度看,这可能不是一个好结果,因为 PA 用户并不一定应该被授予一堆 HR 权限。授权检查范围不是越大越安全很多项目一开始会把授权检查理解成越多越安全。这个判断只对了一半。授权检查过少当然有风险,但授权检查过多也会制造另一种风险。为了让业务继续运行,管理员可能被迫给出更宽的权限值,甚至直接给某些字段维护*。从审计角度看,这比一开始就明确控制检查范围更难解释。Profile Generator 的目标是根据菜单、事务码、应用入口和授权默认值,自动生成比较合理的授权数据。PFCG 在生成角色权限时