SAP使用者許可權控制設定及開發
建立使用者SU01
事務碼:SU01,使用者主資料的維護,可以建立、修改、刪除、鎖定、解鎖、修改密碼等
預設:可以設定使用者的起始選單、登入的預設語言、數字顯示格式、以及日期和時間的格式設定
引數:SAP很多螢幕欄位都會對應一個指定的引數ID,該引數ID及值一般儲存在SAP所劃分的記憶體區域中,在SAP GUI啟動時會自動讀取,並作為預設值自動賦值給螢幕上相關欄位中,如SD中銷售組織引數ID為VKO,HR國家分組引數ID為MOL:
注:一個角色只對應一個引數檔案
許可權角色
使用者的許可權選單是通過許可權角色分配來實現的
自定義許可權角色 PFCG
事務碼:PFCG
SAP針對不同的功能模組提供了很多內建的角色,如SD模組的許可權角色名都是以 SAP_SD 為字首,HR模組以 SAP_HR為字首。
在實際應用中,往往會開發很多的工具和報表,並且需要對這些特定的程式進行許可權分配,本節將通過新建一個自定義的角色來介紹使用者角色許可權維護細節。
角色維護又分為單一角色和複合角色,單一角色是一個獨立的許可權物件,而複合角色可以由多個單一角色組合而成,能夠同時繼承不同單一角色的許可權。下面建立一個SD的角色:
為角色分配選單許可權
為角色分配許可權資料
上面分配完選單後,就實現了在使用者選單中能看到的相關事務碼選單項,但是能否操作選單中所對應事務的業務資料還得設定具體的許可權資料:
為某個角色分配具體的許可權資料後,會自動產生一個引數檔案,SAP在執行中會通過讀取該引數檔案的資料來進行使用者許可權的檢查及管控。
在進行更改“許可權資料”前,先簡單瞭解一下SAP的許可權物件(許可權物件設定好後,需要繫結到事務碼上,然後在ABAP程式中是通過AUTHORITY-CHECK OBJECT語句來做許可權檢查的,這樣許可權物件就起作用了):
在SAP實際應用中,使用者所直接操作的是螢幕及螢幕所對應的欄位,而這些具體欄位都是由許可權物件進行控制,包括該欄位所允許的操作及允許的值(資料)。
本例中為角色分配了事務VA01——建立銷售訂單,在建立銷售單時需要輸入具體的組織級別,在“許可權”頁籤中單擊“更改許可權資料”按鈕,系統將自動抓取該角色選單中所分配的所有事務碼所對應的許可權物件,會彈出一個定義組織級別對話方塊,要求使用者輸入具體的業務資料控制範圍,如:
為許可權欄位分配值可以是單個值,也可以是某個取值範圍,輸入符號“*”表示為該欄位允許所有值,也可以單擊對話方塊右下角的“完全許可權”按鈕,為還沒有分配的值的欄位分配值。注:這個介面填充的值會帶到下一介面,也可以在這裡什麼不輸,而是直接到下一介面輸入,這裡只是將所分配的事物碼所涉及的許可權物件的許可權欄位集中在這是輸入值,只是為了方便
SAP角色的許可權分配是從許可權物件直接派生過來的,可以在不同的許可權角色中同時呼叫同一許可權物件,併為所生成物件分配定義不同的許可權值。
點選“儲存”後,SAP會將許可權物件以及所維護的許可權值以樹狀結構分層列出,最頂級為物件類,物件類是同類屬性的許可權物件的集合,一個物件類可以包含多個許可權物件。在許可權角色維護頁面的主選單中執行“實用程式|技術名稱開啟”命令,將在每個欄位的右邊顯示所有的物件類名稱及許可權物件名稱:
該介面通過狀態燈來表示各許可權物件維護狀態,綠燈代表啟用,黃色表示未啟用,紅色代表未給許可權欄位分配值,單擊許可權欄位前的鉛筆可以定義該欄位的授權值:
許可權物件維護完成後,節點的狀態燈會變為綠色,單擊“儲存”按鈕後會彈出一個“為生成許可權引數檔案分配引數檔名稱”對話方塊:
再點選,啟用許可權資料,返回到角色維護介面,可以看到生成的許可權引數檔案:
將角色分配給使用者
先建立新的使用者 800USER02 但角色與引數檔案都為空:
(注:當角色建立好以後,除了在PFCG裡分給其他使用者外,實質上可以直接通過SU01來對某使用者進行角色的分配:
,當分配好角色時,該角色所帶的引數檔案也會自動帶過來放在引數檔案Tab中,但你也可以在引數檔案中還可以直接將其他的引數檔案加進來,如SAP_ALL、SAP_NEW引數檔案)
由於沒有賦任何許可權,所以此時800USER02沒有任何許可權:
單擊“使用者比較”按鈕,將彈出“比較角色使用者主資料記錄”對話方塊:
點選“完成比較”,該使用者所對應的許可權角色將正式生效。
完成後,再去檢視 800USER02 使用者的角色與引數檔案頁籤,發現已關聯上了:
通過上面的設定後,800USER02使用者才有權執行VA01、VA02兩個事務碼,但是,由於前面資料許可權欄位“銷售憑證型別”沒有設定任何值,所以在建立時還是會報錯:
可以將該憑證型別值加上即可:
許可權角色在系統間的傳輸
自定義許可權物件
前面已經介紹瞭如何在許可權角色中維護SAP所提供的標準許可權物件,本節介紹如何自定義許可權物件。
SU20:許可權欄位清單,可以新增、修改、刪除許可權欄位,可以瀏覽該欄位具體被哪些許可權物件所呼叫。
SU21:維護許可權物件,可以建立和維護許可權類、許可權物件,許可權欄位在該事務碼中被分配到許可權物件
SU22:維護許可權物件的分配,可以通過該事務碼為具體事務分配許可權物件
許可權欄位的維護SU20
建立許可權欄位:
物件類及許可權物件的維護SU21
物件類是多個許可權物件的集合,而一個許可權物件又可以分配多個許可權欄位,物件類和許可權物件都是通過事務碼SU21來維護的。
一旦新增了使用者的自定義許可權物件後,需要單擊工具欄中的按鈕,將把新增的許可權物件賦值給 SAP_ALL 這個許可權引數檔案。
建立物件類:
建立許可權物件:
將許可權物件分配到事務碼SU22
SU22:通過該事務碼還可以查詢某個事務有哪些許可權物件
為了下面的演示,建立一個HELLO程式事務程式碼ZJZJ_HELLO:
輸入事務碼ZJZJ_HELLO後,執行該程式後進入許可權物件分配頁面,對於新增的事務,SAP都會預設分配一個S_TCODE許可權物件,用於管控使用者操作是否存在該事務的許可權:
可為許可權欄位設定預設值,這些值會在角色許可權分配時自動帶出:
通過上面建立完自定義的許可權物件ZS001,並將它與事務程式碼ZJZJ_HELLO繫結,這樣就可以將該事務程式碼分配到角色選單中了(注:到目前為止,上面只是設定了某個事務碼具體的許可權資料,要使用這些許可權資料的起作用,還得要通過該事務碼所對應的ABAP程式來檢查所分配的許可權物件的許可權資料,標準的Tcod不需另寫ABAP,預設對應的ABAP程式已經實現了?)
許可權物件(Authorization Object),許可權欄位(Authorization Field),允許的操作(Activity),允許的值(Field Value)
角色包含了若干許可權物件,在透明表AGR_1250中有儲存二者之間的關係;許可權物件包含了若干許可權欄位、允許的操作和允許的值,在透明表 AGR_1251中體現了ROLE/Object/Field/Value之間的關係;有一個特殊的許可權物件用來包含了若干事務碼。這個許可權物件叫 “S_TCODE”,該許可權物件的許可權欄位叫“TCD”,該欄位允許的值(Field Value)存放的就是事務程式碼;有一種特殊的許可權欄位用來表示可以針對該許可權物件做哪些操作,是允許建立、修改、顯示、刪除或者其他呢,該許可權欄位叫 “ACTVT”,該欄位允許的值(Field Value)存放的就是允許操作的程式碼,01代表建立、02代表修改、03代表顯示等;SAP 系統自帶了若干許可權物件、預設控制了若干許可權欄位(對應到透明表的某些欄位)。可以用事務碼SU20來檢視系統有哪些許可權欄位,用SU21來檢視系統有哪些預設的許可權物件。於是我們知道了事務程式碼與許可權物件的區別。從許可權控制的範疇來看,事務程式碼屬於一種特殊的許可權物件;一個事務程式碼在執行過程中,為了判斷某個ID是否有許可權執行此事務程式碼,還可能檢查其他若干普通的許可權物件。使用SU22來檢視某個事務程式碼包含了哪些許可權物件。在透明表USOBX中,存放了事務碼與許可權物件的對應關係。
自定義許可權物件
上文所說的系統自帶許可權物件與許可權欄位僅能滿足有限的需要,其許可權稽核的邏輯也是系統硬編碼了的,我們能做的只是是否啟用某項許可權物件的檢查(使用SU22)。如果需要自定義,通過SU20、SU21定義即可。呼叫的時候在程式中加入類似程式碼:
AUTHORITY-CHECK OBJECT 'Z_VKORG' ID 'VKORG' FIELD 'REC_VKORG-VKORG'.
IF SY-SUBRC <> 0.
MESSAGE 'No Authorization!' TYPE 'E'.
ENDIF.
BW授權
BW標準授權(即操作授權)
控制使用者是否可以修改、建立、檢視報表
通過角色模板生成許可權資料
上面(為角色分配選單許可權/為角色分配許可權資料)是根據你選擇的事務碼(選單)後,再進“許可權”Tab點選“更改許可權資料”時,會自動蒐集該事務碼所用到的許可權物件所用來的組織結構許可權欄位羅列出來,在彈出組織級別值維護框中輸入許可權範圍,則在角色許可權資料維護樹裡,這會自動會使用這些值(當然也可以不在此框中進行設定,直接跳到角色許可權資料維護樹裡進行設定)。我們這裡是給報表設定許可權,沒有對應於哪個具體的TCD,所以只能過角色模板(角色模板其實就是為了控制某個應用功能所需要的許可權物件集),或者在知道某個應用需要哪些許可權物件時手動加入這些許可權物件而不需要通過模組來設定(請參考後面):
但點選更改許可權資料時,會彈出框,可以選擇一個角色模板,可以基於此模板進行許可權資料的設定:
選擇S_RS_RREDE模板(該模板就是用來控制前端報表人員許可權的),再點“採用參照”,就可以基於模板進行許可權資料維護了(如果選擇“不要選擇模板”,則需手動加入所需要的許可權物件,這個可以參考後面相應章節)。開啟模板後,僅需對下面兩個許可權物件(S_RS_COMP、S_RS_COMP1)進行許可權資料設定即可,以下是模板預設值:
模板中S_RS_COMP許可權資料有兩組,多組方便靈活控制權限資料,一般只有一組許可權資料,如果需要多組,則可以通過以下方式來讓同一許可權物件有多組許可權資料:
上面有兩組許可權資料,當有多組資料時,如果某個許可權在兩組都有,最終的許可權是疊加的的
S_RS_COMP許可權物件: 每個許可權物件的每個許可權欄位的業務含義是不一樣的,但一般都會有ACTVT這個許可權欄位,該許可權欄位就是控制是否可以增、刪、改、查等這些許可權的,其它許可權欄位的含義請通過SUIM事務碼來檢視該許可權物件的文件說明:
下面只可查詢報表(許可權引數“報告元件的型別”“查詢”,即Query,表示報表元件)(注:一定要將執行勾上,否則查不出結果),不可新增、修改、刪除報表:
下面加上了可刪除、建立、修改報表功能許可權:
發現一個有趣現象:刪除許可權包含了修改許可權?只要你勾上了刪除,不勾修改,一樣可以修改;但反過來不行:只勾修改,不勾刪除,還是不能刪除:
下面許可權情況下,不能通過報表工具建立、刪除、修改變數(但查詢時可以使用):
S_RS_COMP1許可權對應是對 S_RS_COMP許可權物件的一種補充:即限制只准操作哪些人建立的報表
手動新增許可權物件
前提是要知道該項功能需要用到哪些許可權物件,可以使用SU22來查。上面模式許可權用到了以下幾個主要的許可權物件,手動將他們加進去即可:
許可權物件:S_RS_COMP
S_RS_COMP1
S_RFC
S_TCODE
事務程式碼:RRMX 這個事務程式碼是必須的,用它來開啟查詢分析器的程式碼。
自定義的許可權和基於模板的一樣。
BW分析授權
分析授權:限制報表使用者只能看那些資料?
執行rsecadmin事務碼:
回到報表設計工具,針對客戶欄位建立許可權變數(許可權變數的作用就是說建立的變數的值不用在介面上輸入,而值是來自於分析權授權所分配的許可權值):
注:如果你的標準授權是使用的是BW授權模板來建立的標準授權,則還是會查詢出所有資料,因為授權模板中S_RS_AUTH授權對應中BIAUTH許可權欄位預設的值就是0BI_ALL,這是一個系統提供的標準分析物件,是可以檢視所有許可權的分析物件:
所以通過模板建立的標準授權是不行的,所以只能是手工載入一些必要的授權物件後來進行標準授權
注:分析授權除了通過rsecadmin將其分配個使用者外:
也可以將分析許可權直接分配到BW模板許可權中的S_RS_AUTH中:
並將使用者直接分配的分析授權刪除掉(rsecadmin),其結果還是可控:
這樣分析許可權就沒有直接分配到某個人了,而是將其分配給標準授權,而標準授權是與使用者相關的,所以最終分析許可權就會間接與使用者相關連了,下面是使用者所分配的標準授權:
在程式中呼叫許可權物件
在很多SAP標準程式中,已經存在了對許可權資料的呼叫及管控功能
在程式中可以通過ABAP程式編輯器快速插入呼叫許可權的程式碼:
許可權程式碼需要放在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語句會根據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.
通過程式檢查是否有權執行某個Tcd
在ABAP程式碼中所有呼叫SAP事務處理命令的地方,都需要事先進行詳細的授權檢查(呼叫S_TCODE許可權物件來實現),以確認當前使用者是否擁有執行此命令所必須的許可權:
CALL TRANSACTION ‘SU10’.
增加一段AUTHORITY-CHECK程式碼:
AUTHORITY-CHECK OBJECT 'S_TCODE
ID 'TCD'
FIELD 'SU10'.
IF sy-subrc = 0.
CALL TRANSACTION 'SU10'.
ENDIF.
這樣就可以在呼叫前確定當前使用者是否有權執行。
在程式中讀取許可權物件所設定的許可權值
GET_AUTH_VALUES
返回該許可權物件中的所有許可權欄位以及該欄位所對應的許可權值。
使用者許可權缺失檢查SU53
建議為所有使用者角色分配分配該事務的許可權,以方便管理員在出現許可權問題時及時核查。
在執行事務時出現許可權檢查錯誤後,輸入事務程式碼SU53,則會顯示許可權評估檢查結果:
使用者、角色、許可權物件、事務等之間的關係檢視 SUIM
如:檢視某個事務程式碼被分配到了哪些角色:SUIM
原文出自 SAP師太 技術部落格,部落格連結: www.cnblogs.com/jiangzhengjun