ARTICLE DETAIL

资讯详情

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

SAP权限对象维护实战:从SU21/SU20到PFCG角色落地

SAP权限对象维护实战:从SU21/SU20到PFCG角色落地 简介SAP权限管控是保护系统敏感数据和功能不被越权使用的关键机制。这份DOC文档专为SAP顾问、实施人员、开发者和权限运维人员编写围绕权限字段、权限对象、权限角色、权限对象赋予、ABAP权限校验和ALV导出控制六个主题系统梳理SAP权限维护的完整脉络。文档详细演示SU20维护权限字段、SU21创建权限对象、PFCG配置角色并分配用户的操作流程同时给出AUTHORITY-CHECK权限校验语句示例以及通过S_GUI权限对象限制ALV报表导出的配置方法可作为项目权限割接、角色设计与日常权限维护的实操参考。资源共1个doc文件压缩包约348KB内容重点突出、步骤清晰用户可按章节快速定位并直接落地练习。目前已有1537人学习浏览适合需要从零搭建SAP权限体系或完善现有权限策略的读者。1. 维护权限对象先搞清它管什么在SAP权限体系里权限对象Authorization Object是权限检查的最小原子。它不直接分配给用户而是通过角色承载。一个权限对象由若干个授权字段组合而成比如你能看哪些公司代码、能做哪些活动。很多项目做角色配置时只盯着角色名称和事务代码真正卡脖子的却是权限对象里的字段值没填对。下面从SU21/SU20这两个基础事务讲起把权限对象的创建、字段分配、事务关联、角色落地、传输排错一路串起来。适合刚接手SAP权限的顾问、BASIS以及那些自定义程序老报权限不足的开发。2. 权限对象的结构与设计字段、活动、技术名称2.1 权限对象的三要素授权字段、活动、技术名称权限对象在ABAP程序里是一个静态授权节点运行时通过“AUTHORITY-CHECK”被调用。它必须由一个唯一的技术名称来标识通常不超过10个字符自定义对象习惯用Y或Z开头比如Z_MM_GOODS。技术名称一旦创建后续就不能修改真要改名称就只能删除重建并重新关联角色所以命名最好在项目启动阶段就定下规则。权限对象的“字段”是检查维度最多10个。SAP会自动提供一些常用字段其中最重要、出现频率最高的是ACTVT活动它表示允许执行的操作类型01创建、02更改、03显示、06删除、08报表等。几乎所有权限检查都会带上ACTVT所以创建自定义权限对象时一定要把这个字段加进去。权限对象的另外一部分是组织级别。像公司代码BUKRS、工厂WERKS这类字段会被SAP识别为组织级别。它们在角色维护时会作为“组织级别”特殊处理系统自动带出不需要手工添加。非组织级别字段例如“物料组”“报表编号”则必须在授权组合里手工为每个用户组维护。这里放一张最基础的结构表方便对照组成说明示例技术名称唯一标识创建后不可改Z_MM_GOODS授权字段检查维度最多10个BUKRS, WERKS, ACTVT活动值允许的动作集合01创建, 03显示, 02修改理解权限对象为什么要这样设计比记住步骤更重要。SAP的权限检查是“与”逻辑只要有一个字段不匹配这个权限对象就不通过。比如你的角色里Z_MM_GOODS有公司代码1000、只有03显示但程序检查BUKRS2000、ACTVT03结果就是拒绝。很多人把自己看到的“有权限”误认为全局有权限其实是漏看了字段值。这个特性也是后面所有排错的主线。2.2 用SU21创建权限对象命名规则与字段分配创建权限对象的入口是事务代码SU21全称权限对象管理。第一次进去会看到按对象类分组的列表。对象类相当于权限对象的文件夹比如“财务会计”下的对象类是FI“物料管理”是MM自定义对象类通常自建在Y开始的对象类里。具体操作步骤我按项目里的习惯来运行SU21输入自定义对象类例如“Y_DEMO”。点击工具栏的“创建”图标输入权限对象技术名称强烈建议控制在10字符以内。输入短文本短文本要写明用途例如“物料出入库显示权限”方便以后用SUIM查。选择“分配字段”在字段列表里勾选已有的字段。如果字段未在SU20里存在需要先去3.1节创建。保存系统会自动绑定一个开发请求。新建权限对象时可以采用“复制自已有对象”的方式。比如参考系统标准对象M_MSEG_LGO等复制过来再改名。复制可以少敲字段但风险是会把别人复杂的字段控制逻辑带过来后面排查时很累。我一般更倾向于手工建字段少而清楚。建好后在ABAP程序中一般这样调用这个权限对象DATA: lv_bukrs TYPE bukrs VALUE 1000. DATA: lv_actvt TYPE actvt VALUE 03. AUTHORITY-CHECK OBJECT Z_MM_GOODS ID BUKRS FIELD lv_bukrs ID ACTVT FIELD lv_actvt. IF sy-subrc 0. MESSAGE e001(00) WITH 您没有该公司代码的显示权限. ENDIF.代码逻辑说明AUTHORITY-CHECK是ABAP的权限检查语句。程序执行到这里SAP会取出当前用户角色中Z_MM_GOODS这个权限对象的授权值和语句里每个ID的FIELD值做比较。只有全部ID都匹配sy-subrc才会是0否则是4无权限或12对象不存在。注意如果变量lv_bukrs为空系统也视为无权限这是很多程序“明明有权却说没权限”的最常见原因。参数说明ID后面写的是权限对象的字段名必须和SU21里完全一致区分大小写FIELD后面是本次检查的实参通常是界面传入或从表里读出来的值。ACTVT字段的03对应显示如果你只想让用户查看这里就写03。2.3 用SU24把权限对象挂到事务代码上在SAP经典的PFCG角色维护流程里角色权限页显示的权限对象是从“事务代码”关联出来的。比如角色里加了一个事务代码MIGO系统会根据MIGO的权限对象自动把所有相关权限对象带进角色。自定义事务代码就没有这个能力必须在SU24里手动声明“这个事务代码要检查哪些权限对象”否则PFCG不会自动带出用户即使获授了事务代码程序内部权限检查依然会失败。SU24的事务代码关联有几种状态标准关联、扩展关联、未维护。标准关联是SAP系统预置的扩展关联是顾问手工加的未维护则代表该事务没有权限对象关联。对于自定义程序你要把权限对象的状态从“未维护”改成“已维护”或“扩展关联”这样角色生成时才有效。操作步骤确保SE93里的事务代码已经存在类型是“程序与屏幕”并填对了程序名。运行SU24输入事务代码。在事务代码和权限对象关系列表里用“添加/修改”新增权限对象Z_MM_GOODS。保存并放入请求。这里要特别注意SU24的改动也是传输对象开发、测试、生产环境必须一致。回到PFCG在角色的菜单里再次读取事务代码确认权限对象出现。很多人会跳过SU24直接把权限对象在PFCG里手工加。这样做也能用但下次角色重建时手工条目会丢失或者多人维护时看不出逻辑来源。正规做法还是先SU24再进PFCG。如果项目里已经有一堆自定义程序批量维护SU24可以借助事务代码SU25它能按程序名批量生成权限对象关联但SU25适合初始化不建议日常反复用。到这里权限对象的“定义”和“关联”已经完成接下来要把它变成用户主数据里真正生效的授权参数文件就需要过一遍SU20和PFCG。3. 把权限对象做成可用角色SU20/SU21到PFCG的落地路径3.1 在SU20维护授权字段字段值域与应用场景SU20是权限字段维护事务。很多人从一开始就会遇到“SU21里找不到自建字段”的问题原因就是字段必须先存在于SU20。SAP标准字段已经很多BUKRS、WERKS、ACTVT、EKORG这些直接勾选即可。但如果是业务自定义维度例如“自定义审批组”“成本中心范围”里的某些特定值就需要自己在SU20里建字段。创建流程运行SU20在“权限字段”内输入新字段名例如Y_DEPT部门维度。点击创建引用一个已存在的数据元素或者直接引用域。推荐引用数据元素因为数据元素自带短文本和描述后续在角色维护页里能直接看出含义。保存。SU20字段不是独立的权限对象它必须在SU21里被分配到某个权限对象中才有意义。同一个字段可以被多个权限对象复用。修改字段描述不会影响已存在的角色但字段的名称或数据结构如果改变会影响所有引用它的权限对象等于一次大改。有个临时文件夹式的用法需要提醒有些项目为了方便在SU20里把字段名称建得和表字段完全一样比如MTART物料类型。这样ABAP里可以直接把表字段值传给AUTHORITY-CHECK减少转换。缺点是权限字段变得和业务表字段强耦合如果以后表字段类型变了会跟着飘。我一般只在标准字段确实不够用的时候才自建字段。3.2 在SU21里创建授权组合并生成权限参数文件权限对象建好之后要给它设置允许的字段值组合。这个组合在SAP里叫“授权”有时候也叫“权限变式”。每个权限对象可以有多个授权组合每个组合是一套字段取值。比如Z_MM_GOODS可以有“公司1000只读”和“公司2000可修改”两个授权组合。操作入口还是在SU21。双击已创建的权限对象点“创建授权”然后按提示为每个字段填值单个值直接写1000、03。区间通过“包含区间”的方式输入。通配符*表示任意值。生成后系统会在“授权参数文件”里为该组合生成一个内部名称这个参数文件最终会用于生成角色的权限数据。这里有一张组合示例表授权组合BUKRSACTVT适用场景Z_MM_GOODS_1000_031000031000公司只查看Z_MM_GOODS_2000_23200002,032000公司可修改与查看生成授权组合时有一个边界组合里的字段值越少后面要维护的角色就越简单但检查粒度也越粗。例如把ACTVT做成*等于不区分动作这种组合容易埋下安全漏洞。所以维护权限组合时我习惯把“显示”单独做一个组合“修改显示”再做一个组合方便在角色里按最小权限原则挑选。这里也要说清楚一个老误区授权参数文件的生成在旧系统里可以手工用SU02维护但在新角色体系下直接改SU02里的参数文件会导致角色在PFCG重新生成时把你手工的内容覆盖掉。常见做法是参数文件只由PFCG生成SU02只用于查看不在SU02里动刀。3.3 在PFCG中引用权限对象并分配用户PFCG是角色维护的总入口。一个权限对象要真正生效必须被引用进至少一个角色然后把这个角色分配给用户。具体路径如下运行PFCG输入角色名称例如Z_DEMO_USER点击创建。填写角色描述。在“菜单”标签页添加上需要的菜单项事务代码或自开发程序都可以。如果菜单里的事务代码已经在SU24做了权限扩展系统会自动加载权限对象。切到“权限”标签页点击“更改授权数据”。在授权树里找到Z_MM_GOODS选择前面创建好的授权组合。如果组合不够用可以在这里临时修改字段值。点击工具栏上的“生成授权数据”系统会弹出“授权数据已生成”的提示。点击“比较”让当前授权状态与已生成的版本比较无误后保存角色。在“用户”标签页分配用户或者回SU01把角色指派给用户。这里最常见的失败点是用户已经分配了角色但是在运行程序时权限检查依然报错。原因多半是用户主记录里的参数文件没有刷新。分配角色的动作本身会写入用户主记录但如果是修改了一个已分配用户角色的权限对象字段值该用户必须重新登录或者用事务代码SU10批量同步授权数据否则他们拿到的还是旧参数文件。在角色分层上我给几个参考做法。先建“技术角色”只含菜单、事务代码和相关的权限对象再建“复合角色”把多个技术角色组合起来分配给业务人员。不要在一个角色里塞进采购、销售、财务多套权限对象否则以后按业务组织调整用户权限时只能调整复合角色的成员关系技术角色保持单一职责。这种解耦会让权限维护成本低很多。4. 传输与变更管理权限对象的生命周期4.1 权限对象的传输类型与请求绑定权限对象是ABAP开发对象属于权限相关的基础配置。在开发系统SU21里创建的权限对象会自动绑定到一个Workbench请求。用SE10可以查看请求里的对象类型你会发现权限对象、授权字段、SU24维护记录可能在不同请求里这点和普通开发对象一样需要一起传输。传输路径一般是开发机-测试机-生产机由BASIS通过STMS控制。注意权限对象传输后目标系统必须执行激活操作否则系统不识别。在STMS导入后如果“导入任务完成”里有错误的激活任务需要检查对象版本。这里有一个容易忽略的细节权限对象的传输不等于角色传输。权限对象只是基础引用了它的角色定义、授权数据、参数文件都得单独存在于角色相关对象里。所以传输清单里需要同时包含权限对象、SU24关联、角色定义和可能的自定义字段。少传任何一环到生产环境就是“有对象没权限”“有权限没关联”的翻车现场。一种稳妥的检查方式在SE10请求的“对象树”里筛选出权限对象、角色和授权数据确认它们都在同一批传输请求里或者至少能保证先传权限对象后传角色。由于传输顺序有依赖建议权限对象在前角色在后。传输对象可以用这张表来梳理传输对象说明传输顺序权限字段 (SU20)自建字段的基础最先权限对象 (SU21)字段组合定义然后SU24关联事务代码与权限对象绑定随后角色定义PFCG角色头部和菜单再后授权数据角色字段值授权数据最后4.2 变更权限对象时的兼容性风险权限对象在建好后会面临三种常见的变更增加字段、删除字段、修改字段值允许范围。这三种的兼容性风险不一样。增加字段是最麻烦的。因为权限检查逻辑是“字段全部匹配”新增一个字段后旧角色里没有这个字段的授权值系统会把缺失当作无权限。即使角色里其他字段都有也会直接拒绝。所以给已有权限对象新增字段必须立即排查所有引用它的角色逐一补充新字段的授权值再重新生成授权数据。排查引用清单用SUIM选择“按权限对象搜索角色”几分钟就知道波及面。删除字段的风险则出现在反向场景你删除了权限对象的某个字段但角色里该字段的授权数据还留着。PFCG比较角色时系统会提示“授权数据包含已删除的字段值”如果没有清理干净角色激活会报错。删除字段前先对引用角色做一次完整的导出备份再逐角色清理。修改字段值允许范围比如原来是显示现在开放修改影响相对小但要把新旧角色在PFCG里重新生成一次并确认现有用户是否应该受影响。这里特别提醒不要在生产机直接改权限对象。生产机的修改不会自动创建传输请求容易造成开发、生产对象不一致后续再传权限对象时直接覆盖了你的手工修补。4.3 跨系统导入后的权限角色重建权限对象从开发传到测试再传生产每一步都不能只依赖对象导入。我一般会在导入后做三件事第一在目标系统运行SU21确认权限对象存在且字段完整。有时候传输请求漏了SU20字段的定义权限对象里会出现“字段丢失”的状态需要优先补传字段。第二对引用该权限对象的角色重新执行PFCG“生成授权数据”。因为角色里的授权数据在源系统生成时把权限对象的字段值快照存在了角色表里。目标系统如果只是接收角色授权数据可能是旧版本必须重新生成让目标系统用最新的权限对象结构重新拼授权参数文件。第三刷新用户主记录。用事务代码SU10可以批量对多个用户执行“同步授权数据”或者在SU01里逐个用户保存。这一步完成后用户重新登录才会拿到新的参数文件。跨系统传输最容易忽略的是权限参数文件的“激活状态”。如果PFCG生成失败用户主记录里还是旧参数文件但角色授权数据已经更新这时系统会提示参数文件与授权数据不匹配。解决办法是重新执行生成必要时先删除旧的参数文件记录再重建。5. 维护权限对象避坑5个常见翻车点5.1 现象新权限对象在角色里选不到在SU21里明明建好了权限对象PFCG角色的权限树里却找不到。原因PFCG的权限树是根据菜单里的事务代码再到SU24反查权限对象。如果自定义事务代码没有做SU24关联或者关联状态是“未维护”权限树就不会刷新出这个对象。解决先去SU24对事务代码做扩展关联把权限对象的状态改为“已维护”。保存后回到PFCG在权限页重新“读取”权限树就会出现。注意PFCG有时会缓存需要角色退出重新进入。5.2 现象字段值维护成“*”但程序仍报权限错误角色授权数据里权限对象的BUKRS和ACTVT都填了*用户运行程序依旧提示无权限。原因最常见的是程序传给AUTHORITY-CHECK的字段本身为空。号不代表“空值豁免”系统拿空值和号做比较会直接拒绝。另外有些对象带“组织级别的字段检查”空值会触发更严格的规则。解决用SU53看实际检查值和对象字段。重点盯程序的入参确保从屏幕或表读到的值在传参前就存在。如果程序逻辑有缺陷需要在调用之前做缺省赋值或者加显式检查并友好报错。5.3 现象权限对象删除后用户权限仍受影响在SU21里把权限对象勾选删除并成功传输但用户运行程序仍然报该对象不存在或者某些用户权限莫名失效。原因权限对象删除后角色里的授权数据并不会自动清理。用户主记录中的参数文件也保留着旧条目。系统可能因为权限文件里缺了对象而拒绝或者对象不存在时直接禁止通过。解决删除前必须用SUIM查询引用角色把每个角色里该对象移除并重新生成授权数据。删除后还要用SU10刷新所有受影响用户的授权参数文件。删对象不是“移除勾选”那么简单的本质上是把权限体系里的一块地基抽走。5.4 现象SU24维护的事务代码权限不生效费了半天劲在SU24里给事务代码加了权限对象分配用户后在程序里运行还是直接跳过权限检查或者还是报错。原因两种情况。一是SE93里事务代码指向的程序名不匹配SU24关联的是另一个程序二是SU24的修改没有保存到传输请求只在开发系统生效测试或生产系统还是旧状态。解决在SE93检查程序名在SU24里重新指定正确的权限对象。传输前确认请求里包含SU24的对象条目。上线后抽查一个角色看权限对象是否带出来。如果带出来了还报权限错误再检查程序里AUTHORITY-CHECK的字段赋值。5.5 现象权限对象传输后目标系统无法生成参数文件传输成功SU21里也能看到权限对象但PFCG点击“生成授权数据”报错“权限对象或字段不存在”。原因目标系统缺少权限对象依赖的SU20字段或者字段所属的数据元素没有一起传过去。权限对象的定义是引用了字段的字段丢失就会让参数文件生成过程找不到完整结构。解决优先检查SU20字段把所有自建字段传到目标系统。如果字段依赖数据元素要确认数据元素和域也在请求里。然后重新进入PFCG刷新角色不要直接改生产系统的SU21来临时创字段否则会和传输内容冲突。这五条基本上覆盖了权限对象维护里最典型的现场。它们有一个共性权限对象不是独立存在牵一发而动全身任何修改都要从“SU21定义 - SU24关联 - 角色授权 - 用户参数文件”这条链路整体看。6. 验证与进阶用SU53和权限审计查漏6.1 SU53定位具体缺失的权限对象当用户报权限不足让用户保留当前会话运行SU53。SU53会列出最近一次失败的权限检查明细对象名、字段名、检查值。比如显示对象Z_MM_GOODS、字段BUKRS2000、ACTVT03你立刻知道是谁在哪个维度拒绝了。注意SU53可能被后续权限检查覆盖一报错就运行最准。6.2 权限对象维护的版本对比技巧PFCG的“比较”按钮能看授权数据和已生成参数文件的版本差异。每次调整权限对象后对相关角色做一次比较把“未生成”差异清掉。另外用SUIM按权限对象查角色引用清单它是变更影响分析和传输核对表。做权限对象变更前先导这份清单逐角色处理。6.3 我的验证习惯开发环境调试时我会在AUTHORITY-CHECK后加断点实时看sy-subrc和SU53显示确认是字段值问题还是对象关联问题。另一个习惯是把权限组合短文本写成“模块-用途-版本”比如“MM-出库-2024”因为PFCG授权树里会直接显示命名不清会加重误配。权限对象的每次变更哪怕只是加一个值都要记录在变更登记表里传输到测试环境后做一次角色验证再放生产。这套流程看起来琐碎但能避免绝大多数权限事故。希望帮到你。本文还有配套的精品资源点击获取
返回列表