事務碼:SU01,用戶主數(shù)據(jù)的維護,可以創(chuàng)建、修改、刪除、鎖定、解鎖、修改密碼等
缺省:可以設置用戶的起始菜單、登錄的默認語言、數(shù)字顯示格式、以及日期和時間的格式設置
參數(shù):SAP很多屏幕字段都會對應一個指定的參數(shù)ID,該參數(shù)ID及值一般存儲在SAP所劃分的內(nèi)存區(qū)域中,在SAP GUI啟動時會自動讀取,并作為默認值自動賦值給屏幕上相關字段中,如SD中銷售組織參數(shù)ID為VKO,HR國家分組參數(shù)ID為MOL:
注:一個角色只對應一個參數(shù)文件
用戶的權限菜單是通過權限角色分配來實現(xiàn)的
事務碼:PFCG
SAP針對不同的功能模塊提供了很多內(nèi)置的角色,如SD模塊的權限角色名都是以 SAP_SD 為前綴,HR模塊以 SAP_HR為前綴。
在實際應用中,往往會開發(fā)很多的工具和報表,并且需要對這些特定的程序進行權限分配,本節(jié)將通過新建一個自定義的角色來介紹用戶角色權限維護細節(jié)。
角色維護又分為單一角色和復合角色,單一角色是一個獨立的權限對象,而復合角色可以由多個單一角色組合而成,能夠同時繼承不同單一角色的權限。下面創(chuàng)建一個SD的角色:
上面分配完菜單后,就實現(xiàn)了在用戶菜單中能看到的相關事務碼菜單項,但是能否操作菜單中所對應事務的業(yè)務數(shù)據(jù)還得設置具體的權限數(shù)據(jù):
為某個角色分配具體的權限數(shù)據(jù)后,會自動產(chǎn)生一個參數(shù)文件,SAP在執(zhí)行中會通過讀取該參數(shù)文件的數(shù)據(jù)來進行用戶權限的檢查及管控。
在進行更改“權限數(shù)據(jù)”前,先簡單了解一下SAP的權限對象(權限對象設置好后,需要綁定到事務碼上,然后在ABAP程序中是通過AUTHORITY-CHECK OBJECT語句來做權限檢查的,這樣權限對象就起作用了):
在SAP實際應用中,用戶所直接操作的是屏幕及屏幕所對應的字段,而這些具體字段都是由權限對象進行控制,包括該字段所允許的操作及允許的值(數(shù)據(jù))。
本例中為角色分配了事務VA01——創(chuàng)建銷售訂單,在創(chuàng)建銷售單時需要輸入具體的組織級別,在“權限”頁簽中單擊“更改權限數(shù)據(jù)”按鈕,系統(tǒng)將自動抓取該角色菜單中所分配的所有事務碼所對應的權限對象,會彈出一個定義組織級別對話框,要求用戶輸入具體的業(yè)務數(shù)據(jù)控制范圍,如:
為權限字段分配值可以是單個值,也可以是某個取值范圍,輸入符號“*”表示為該字段允許所有值,也可以單擊對話框右下角的“完全權限”按鈕,為還沒有分配的值的字段分配值。注:這個界面填充的值會帶到下一界面,也可以在這里什么不輸,而是直接到下一界面輸入,這里只是將所分配的事物碼所涉及的權限對象的權限字段集中在這是輸入值,只是為了方便
SAP角色的權限分配是從權限對象直接派生過來的,可以在不同的權限角色中同時調(diào)用同一權限對象,并為所生成對象分配定義不同的權限值。
點擊“保存”后,SAP會將權限對象以及所維護的權限值以樹狀結構分層列出,最頂級為對象類,對象類是同類屬性的權限對象的集合,一個對象類可以包含多個權限對象。在權限角色維護頁面的主菜單中執(zhí)行“實用程序|技術名稱打開”命令,將在每個字段的右邊顯示所有的對象類名稱及權限對象名稱:
該界面通過狀態(tài)燈來表示各權限對象維護狀態(tài),綠燈代表激活,黃色表示未激活,紅色代表未給權限字段分配值,單擊權限字段前的鉛筆可以定義該字段的授權值:
權限對象維護完成后,節(jié)點的狀態(tài)燈會變?yōu)榫G色,單擊“保存”按鈕后會彈出一個“為生成權限參數(shù)文件分配參數(shù)文件名稱”對話框:
再點擊,激活權限數(shù)據(jù),返回到角色維護界面,可以看到生成的權限參數(shù)文件:
先創(chuàng)建新的用戶 800USER02 但角色與參數(shù)文件都為空:
(注:當角色創(chuàng)建好以后,除了在PFCG里分給其他用戶外,實質(zhì)上可以直接通過SU01來對某用戶進行角色的分配:
,當分配好角色時,該角色所帶的參數(shù)文件也會自動帶過來放在參數(shù)文件Tab中,但你也可以在參數(shù)文件中還可以直接將其他的參數(shù)文件加進來,如SAP_ALL、SAP_NEW參數(shù)文件)
由于沒有賦任何權限,所以此時800USER02沒有任何權限:
單擊“用戶比較”按鈕,將彈出“比較角色用戶主數(shù)據(jù)記錄”對話框:
點擊“完成比較”,該用戶所對應的權限角色將正式生效。
完成后,再去查看 800USER02 用戶的角色與參數(shù)文件頁簽,發(fā)現(xiàn)已關聯(lián)上了:
通過上面的設置后,800USER02用戶才有權執(zhí)行VA01、VA02兩個事務碼,但是,由于前面數(shù)據(jù)權限字段“銷售憑證類型”沒有設置任何值,所以在創(chuàng)建時還是會報錯:
可以將該憑證類型值加上即可:
前面已經(jīng)介紹了如何在權限角色中維護SAP所提供的標準權限對象,本節(jié)介紹如何自定義權限對象。
SU20:權限字段清單,可以新增、修改、刪除權限字段,可以瀏覽該字段具體被哪些權限對象所調(diào)用。
SU21:維護權限對象,可以創(chuàng)建和維護權限類、權限對象,權限字段在該事務碼中被分配到權限對象
SU22:維護權限對象的分配,可以通過該事務碼為具體事務分配權限對象
創(chuàng)建權限字段:
對象類是多個權限對象的集合,而一個權限對象又可以分配多個權限字段,對象類和權限對象都是通過事務碼SU21來維護的。
一旦新增了用戶的自定義權限對象后,需要單擊工具欄中的按鈕,將把新增的權限對象賦值給 SAP_ALL 這個權限參數(shù)文件。
創(chuàng)建對象類:
創(chuàng)建權限對象:
SU22:通過該事務碼還可以查詢某個事務有哪些權限對象
為了下面的演示,創(chuàng)建一個HELLO程序事務代碼ZJZJ_HELLO:
輸入事務碼ZJZJ_HELLO后,執(zhí)行該程序后進入權限對象分配頁面,對于新增的事務,SAP都會默認分配一個S_TCODE權限對象,用于管控用戶操作是否存在該事務的權限:
可為權限字段設置默認值,這些值會在角色權限分配時自動帶出:
通過上面創(chuàng)建完自定義的權限對象ZS001,并將它與事務代碼ZJZJ_HELLO綁定,這樣就可以將該事務代碼分配到角色菜單中了(注:到目前為止,上面只是設置了某個事務碼具體的權限數(shù)據(jù),要使用這些權限數(shù)據(jù)的起作用,還得要通過該事務碼所對應的ABAP程序來檢查所分配的權限對象的權限數(shù)據(jù),標準的Tcod不需另寫ABAP,默認對應的ABAP程序已經(jīng)實現(xiàn)了?)
權限對象(Authorization Object),權限字段(Authorization Field),允許的操作(Activity),允許的值(Field Value) 角色包含了若干權限對象,在透明表AGR_1250中有存儲二者之間的關系;權限對象包含了若干權限字段、允許的操作和允許的值,在透明表 AGR_1251中體現(xiàn)了ROLE/Object/Field/Value之間的關系;有一個特殊的權限對象用來包含了若干事務碼。這個權限對象叫 “S_TCODE”,該權限對象的權限字段叫“TCD”,該字段允許的值(Field Value)存放的就是事務代碼;有一種特殊的權限字段用來表示可以針對該權限對象做哪些操作,是允許創(chuàng)建、修改、顯示、刪除或者其他呢,該權限字段叫 “ACTVT”,該字段允許的值(Field Value)存放的就是允許操作的代碼,01代表創(chuàng)建、02代表修改、03代表顯示等;SAP 系統(tǒng)自帶了若干權限對象、默認控制了若干權限字段(對應到透明表的某些字段)。可以用事務碼SU20來查看系統(tǒng)有哪些權限字段,用SU21來查看系統(tǒng)有哪些默認的權限對象。于是我們知道了事務代碼與權限對象的區(qū)別。從權限控制的范疇來看,事務代碼屬于一種特殊的權限對象;一個事務代碼在執(zhí)行過程中,為了判斷某個ID是否有權限執(zhí)行此事務代碼,還可能檢查其他若干普通的權限對象。使用SU22來查看某個事務代碼包含了哪些權限對象。在透明表USOBX中,存放了事務碼與權限對象的對應關系。
自定義權限對象
上文所說的系統(tǒng)自帶權限對象與權限字段僅能滿足有限的需要,其權限審核的邏輯也是系統(tǒng)硬編碼了的,我們能做的只是是否啟用某項權限對象的檢查(使用SU22)。如果需要自定義,通過SU20、SU21定義即可。調(diào)用的時候在程序中加入類似代碼:
AUTHORITY-CHECK OBJECT 'Z_VKORG' ID 'VKORG' FIELD 'REC_VKORG-VKORG'.
IF SY-SUBRC <> 0.
MESSAGE 'No Authorization!' TYPE 'E'.
ENDIF.
控制用戶是否可以修改、創(chuàng)建、查看報表
上面(為角色分配菜單權限/為角色分配權限數(shù)據(jù))是根據(jù)你選擇的事務碼(菜單)后,再進“權限”Tab點擊“更改權限數(shù)據(jù)”時,會自動搜集該事務碼所用到的權限對象所用來的組織結構權限字段羅列出來,在彈出組織級別值維護框中輸入權限范圍,則在角色權限數(shù)據(jù)維護樹里,這會自動會使用這些值(當然也可以不在此框中進行設定,直接跳到角色權限數(shù)據(jù)維護樹里進行設置)。我們這里是給報表設置權限,沒有對應于哪個具體的TCD,所以只能過角色模板(角色模板其實就是為了控制某個應用功能所需要的權限對象集),或者在知道某個應用需要哪些權限對象時手動加入這些權限對象而不需要通過模塊來設置(請參考后面):
但點擊更改權限數(shù)據(jù)時,會彈出框,可以選擇一個角色模板,可以基于此模板進行權限數(shù)據(jù)的設定:
選擇S_RS_RREDE模板(該模板就是用來控制前端報表人員權限的),再點“采用參照”,就可以基于模板進行權限數(shù)據(jù)維護了(如果選擇“不要選擇模板”,則需手動加入所需要的權限對象,這個可以參考后面相應章節(jié))。打開模板后,僅需對下面兩個權限對象(S_RS_COMP、S_RS_COMP1)進行權限數(shù)據(jù)設置即可,以下是模板默認值:
模板中S_RS_COMP權限數(shù)據(jù)有兩組,多組方便靈活控制權限數(shù)據(jù),一般只有一組權限數(shù)據(jù),如果需要多組,則可以通過以下方式來讓同一權限對象有多組權限數(shù)據(jù):
上面有兩組權限數(shù)據(jù),當有多組數(shù)據(jù)時,如果某個權限在兩組都有,最終的權限是疊加的的
S_RS_COMP權限對象: 每個權限對象的每個權限字段的業(yè)務含義是不一樣的,但一般都會有ACTVT這個權限字段,該權限字段就是控制是否可以增、刪、改、查等這些權限的,其它權限字段的含義請通過SUIM事務碼來查看該權限對象的文檔說明:
下面只可查詢報表(權限參數(shù)“報告組件的類型”“查詢”,即Query,表示報表組件)(注:一定要將執(zhí)行勾上,否則查不出結果),不可新增、修改、刪除報表:
下面加上了可刪除、創(chuàng)建、修改報表功能權限:
發(fā)現(xiàn)一個有趣現(xiàn)象:刪除權限包含了修改權限?只要你勾上了刪除,不勾修改,一樣可以修改;但反過來不行:只勾修改,不勾刪除,還是不能刪除:
下面權限情況下,不能通過報表工具創(chuàng)建、刪除、修改變量(但查詢時可以使用):
S_RS_COMP1權限對應是對 S_RS_COMP權限對象的一種補充:即限制只準操作哪些人創(chuàng)建的報表
前提是要知道該項功能需要用到哪些權限對象,可以使用SU22來查。上面模式權限用到了以下幾個主要的權限對象,手動將他們加進去即可:
權限對象:S_RS_COMP
S_RS_COMP1
S_RFC
S_TCODE
事務代碼:RRMX 這個事務代碼是必須的,用它來打開查詢分析器的代碼。
自定義的權限和基于模板的一樣。
分析授權:限制報表用戶只能看那些數(shù)據(jù)?
執(zhí)行rsecadmin事務碼:
回到報表設計工具,針對客戶字段創(chuàng)建權限變量(權限變量的作用就是說創(chuàng)建的變量的值不用在界面上輸入,而值是來自于分析權授權所分配的權限值):
注:如果你的標準授權是使用的是BW授權模板來創(chuàng)建的標準授權,則還是會查詢出所有數(shù)據(jù),因為授權模板中S_RS_AUTH授權對應中BIAUTH權限字段默認的值就是0BI_ALL,這是一個系統(tǒng)提供的標準分析對象,是可以查看所有權限的分析對象:
所以通過模板創(chuàng)建的標準授權是不行的,所以只能是手工加載一些必要的授權對象后來進行標準授權
注:分析授權除了通過rsecadmin將其分配個用戶外:
也可以將分析權限直接分配到BW模板權限中的S_RS_AUTH中:
并將用戶直接分配的分析授權刪除掉(rsecadmin),其結果還是可控:
這樣分析權限就沒有直接分配到某個人了,而是將其分配給標準授權,而標準授權是與用戶相關的,所以最終分析權限就會間接與用戶相關連了,下面是用戶所分配的標準授權:
在很多SAP標準程序中,已經(jīng)存在了對權限數(shù)據(jù)的調(diào)用及管控功能
在程序中可以通過ABAP程序編輯器快速插入調(diào)用權限的代碼:
權限代碼需要放在AT SELECTION-SCREEN.事件塊里
AUTHORITY-CHECK OBJECT '<object>'
ID '<name1>' FIELD <f1>
ID '<name2>' FIELD <f2>
.............
ID '<name10>' FIELD <f10>.
<object>為檢查的權限對象。你必須將所有的權限字段(<name1>,<name2> ...)列出來。<f1>,<f2>....為相應權限字段的值。AUTHORITY-CHECK語句會根據(jù)user’s PRofile來檢查權限對象的權限字段,看用戶是否對給出的<f1>,<f2>....權限字段值是否有權限。如果不想對某個權限字段進行權限檢查,可以使用DUMMY來代替FIELD <f>。
AT SELECTION-SCREEN. PERFORM frm_auth_check.
FORM frm_auth_check . data: l_werks type werks, c_text1(60) type c value 'You have no authorization in Plant:'. select werks from t001w into l_werks where werks in s_werks. authority-check object 'ZDABAP' id 'VKORG' dummy id 'BUKRS' dummy id 'WERKS' field l_werks id 'EKORG' dummy id 'KOKRS' dummy id 'GSBER' dummy id 'SEGMENT' dummy. if sy-subrc <> 0. message e001(00) with c_text1 l_werks. endif. endselect.
endform.
form frm_auth_check . data: begin of lt_bukrs occurs 0, bukrs type t001-bukrs, end of lt_bukrs. select bukrs from t001 into corresponding fields of table lt_bukrs where bukrs in s_bukrs. loop at lt_bukrs. authority-check object 'ZDABAP' id 'VKORG' dummy id 'BUKRS' field lt_bukrs-bukrs id 'WERKS' dummy id 'EKORG' dummy id 'KOKRS' dummy id 'GSBER' dummy id 'SEGMENT' dummy. if sy-subrc <> 0." message s001(00) display like 'E' with 'You do not have authorization to access company code:' lt_bukrs-bukrs. stop. endif. endloop.endform.
在ABAP代碼中所有調(diào)用SAP事務處理命令的地方,都需要事先進行詳細的授權檢查(調(diào)用S_TCODE權限對象來實現(xiàn)),以確認當前用戶是否擁有執(zhí)行此命令所必須的權限: CALL TRANSACTION ‘SU10’.增加一段AUTHORITY-CHECK代碼: AUTHORITY-CHECK OBJECT 'S_TCODE ID 'TCD' FIELD 'SU10'. IF sy-subrc = 0.CALL TRANSACTION 'SU10'.ENDIF.這樣就可以在調(diào)用前確定當前用戶是否有權執(zhí)行。
GET_AUTH_VALUES
返回該權限對象中的所有權限字段以及該字段所對應的權限值。
建議為所有用戶角色分配分配該事務的權限,以方便管理員在出現(xiàn)權限問題時及時核查。
在執(zhí)行事務時出現(xiàn)權限檢查錯誤后,輸入事務代碼SU53,則會顯示權限評估檢查結果:
如:查看某個事務代碼被分配到了哪些角色:SUIM
新聞熱點
疑難解答