
1. SAP权限管理基础为什么需要AGR_USERS和AGR_TCODES表在SAP系统中权限管理就像给公司员工分配门禁卡。每个员工用户需要获得特定区域事务代码的通行权限而角色就是打包这些权限的卡套。AGR_USERS表记录着谁用户拿到了什么卡套角色AGR_TCODES表则定义每个卡套里装着哪些门禁权限事务代码。我见过不少企业因为权限混乱导致数据泄露。比如某次审计发现财务部的实习生居然能查看CEO的薪资数据根源就是角色分配表AGR_USERS和事务代码表AGR_TCODES的关联关系出了问题。这两个表通过AGR_NAME角色名称字段相互关联就像用同一把钥匙打开两扇门AGR_USERS相当于员工花名册关键字段包括UNAME用户登录ID工号AGR_NAME角色名称部门职级FROM_DAT/TO_DAT权限有效期入职/离职日期EXCLUDE特殊标记比如临时权限AGR_TCODES则是权限清单重要字段有TCODE事务代码如F-02是会计凭证TYPE权限类型是否可执行DIRECT是否允许直接跳转实际排查问题时我习惯先用SQ01创建这样的查询布局SELECT AGR_USERS~UNAME, AGR_USERS~AGR_NAME, AGR_TCODES~TCODE, TSTCT~TEXT as TCODE_TEXT FROM AGR_USERS INNER JOIN AGR_TCODES ON AGR_USERS~AGR_NAME AGR_TCODES~AGR_NAME LEFT JOIN TSTCT ON AGR_TCODES~TCODE TSTCT~TCODE WHERE AGR_USERS~UNAME TEST_USER2. SQ01查询工具实战三步定位权限异常2.1 构建基础查询框架打开SQ01事务码时新手常犯的错误是直接拖拽所有字段。我的经验是分三步构建查询确定主表以AGR_USERS为基准通过AGR_NAME关联AGR_TCODES添加关键字段用户维度UNAME用户ID、FROM_DAT生效日期角色维度AGR_NAME、EXCLUDE排他标记事务维度TCODE、DIRECT直接执行标志设置默认筛选 排除已过期的权限 AGR_USERS~TO_DAT sy-datum AND AGR_TCODES~TCODE 实测发现加上TSTCT表的TEXT字段事务代码描述能让结果更直观。但要注意性能影响——我曾在一个超大型系统里因为联查太多表导致查询超时后来改用缓存方案解决。2.2 权限有效期排查技巧权限过期却不自动回收是个常见隐患。通过SQ01可以这样检查设置对比条件 查找已过期但仍能使用的权限 SELECT DISTINCT AGR_USERS~UNAME, AGR_USERS~AGR_NAME, AGR_USERS~TO_DAT FROM AGR_USERS INNER JOIN AGR_TCODES ON AGR_USERS~AGR_NAME AGR_TCODES~AGR_NAME WHERE AGR_USERS~TO_DAT sy-datum AND EXISTS (SELECT 1 FROM USR02 WHERE USR02~BNAME AGR_USERS~UNAME AND USR02~GLTGV sy-datum)特殊场景处理对于TO_DAT为空的记录表示永久权限FROM_DAT大于当前日期的属于预分配权限遇到EXCLUDE‘X’的记录要特别注意可能是临时禁用权限去年帮客户做审计时我们就发现300多个过期权限账户最长的居然过期5年还在使用。后来开发了自动检查Job每月跑这个查询。3. 深度解析排他性权限EXCLUDE字段3.1 EXCLUDE字段的双面性AGR_USERS和AGR_TCODES表中都有EXCLUDE字段但含义不同表名EXCLUDE空值EXCLUDEXAGR_USERS正常分配的角色临时禁用的角色AGR_TCODES角色包含该事务角色排除该事务这个设计很巧妙但也容易混淆。有次客户反馈某个用户突然不能执行F-02事务排查发现AGR_TCODES中该角色的EXCLUDE被设为X但AGR_USERS中用户角色没被排除最终导致用户有角色但角色里排除了关键事务3.2 排查EXCLUDE冲突的SQL模板 查找存在冲突的权限分配 SELECT AGR_USERS~UNAME, AGR_USERS~AGR_NAME, AGR_TCODES~TCODE, CASE WHEN AGR_USERS~EXCLUDE X THEN 用户角色被排除 WHEN AGR_TCODES~EXCLUDE X THEN 事务代码被排除 ELSE 正常 END AS STATUS FROM AGR_USERS INNER JOIN AGR_TCODES ON AGR_USERS~AGR_NAME AGR_TCODES~AGR_NAME WHERE (AGR_USERS~EXCLUDE X OR AGR_TCODES~EXCLUDE X) AND AGR_USERS~UNAME IN (USER1,USER2)建议把这类查询保存为SQ01的变体设置定期检查任务。对于关键用户如财务、HR还可以创建特定监控视图。4. 高级应用权限组合分析与风险预测4.1 权限矩阵分析通过关联查询可以构建用户-事务矩阵我用过这个方案帮客户发现权限过度集中问题 生成权限分布热力图数据 SELECT UNAME, COUNT(DISTINCT TCODE) AS TCODE_COUNT, SUM(CASE WHEN TCODE LIKE F% THEN 1 ELSE 0 END) AS FI_COUNT, SUM(CASE WHEN TCODE LIKE MM% THEN 1 ELSE 0 END) AS MM_COUNT FROM AGR_USERS JOIN AGR_TCODES ON AGR_USERS~AGR_NAME AGR_TCODES~AGR_NAME GROUP BY UNAME ORDER BY TCODE_COUNT DESC把结果导出到Excel后用条件格式标出异常值比如单个用户有超过50个财务事务代码。曾用这个方法发现某分公司会计同时拥有付款(F-53)和银行对账(FF_5)权限明显违反SOD原则。4.2 权限变更追踪AGR_USERS中的CHANGE_DAT/CHANGE_TIM字段记录最后修改时间结合CDHDR变更日志表可以追踪权限变更 查找最近一周的权限变更 SELECT AGR_USERS~UNAME, AGR_USERS~AGR_NAME, AGR_USERS~CHANGE_DAT, CDHDR~UDATE, CDHDR~UTIME, CDHDR~CHANGENR FROM AGR_USERS LEFT JOIN CDHDR ON AGR_USERS~MANDT CDHDR~MANDANT AND AGR_USERS~AGR_NAME CDHDR~OBJECTID AND CDHDR~OBJECTCLAS AGR_USERS WHERE AGR_USERS~CHANGE_DAT sy-datum - 7建议对生产系统设置变更阈值告警比如同一用户单日角色变更超过3次就需要人工复核。