事務碼:SU01,用戶主數據的維護,能夠建立、修改、刪除、鎖定、解鎖、修改密碼等前端
缺省:能夠設置用戶的起始菜單、登陸的默認語言、數字顯示格式、以及日期和時間的格式設置編輯器
參數:SAP不少屏幕字段都會對應一個指定的參數ID,該參數ID及值通常存儲在SAP所劃分的內存區域中,在SAP GUI啓動時會自動讀取,並做爲默認值自動賦值給屏幕上相關字段中,如SD中銷售組織參數ID爲VKO,HR國家分組參數ID爲MOL:工具
注:一個角色只對應一個參數文件oop
用戶的權限菜單是經過權限角色分配來實現的編碼
事務碼:PFCGspa
SAP針對不一樣的功能模塊提供了不少內置的角色,如SD模塊的權限角色名都是以 SAP_SD 爲前綴,HR模塊以 SAP_HR爲前綴。.net
在實際應用中,每每會開發不少的工具和報表,而且須要對這些特定的程序進行權限分配,本節將經過新建一個自定義的角色來介紹用戶角色權限維護細節。設計
角色維護又分爲單一角色和複合角色,單一角色是一個獨立的權限對象,而複合角色能夠由多個單一角色組合而成,可以同時繼承不一樣單一角色的權限。下面建立一個SD的角色:3d
上面分配完菜單後,就實現了在用戶菜單中能看到的相關事務碼菜單項,可是可否操做菜單中所對應事務的業務數據還得設置具體的權限數據:code
爲某個角色分配具體的權限數據後,會自動產生一個參數文件,SAP在執行中會經過讀取該參數文件的數據來進行用戶權限的檢查及管控。
在進行更改「權限數據」前,先簡單瞭解一下SAP的權限對象(權限對象設置好後,須要綁定到事務碼上,而後在ABAP程序中是經過AUTHORITY-CHECK OBJECT語句來作權限檢查的,這樣權限對象就起做用了):
在SAP實際應用中,用戶所直接操做的是屏幕及屏幕所對應的字段,而這些具體字段都是由權限對象進行控制,包括該字段所容許的操做及容許的值(數據)。
本例中爲角色分配了事務VA01——建立銷售訂單,在建立銷售單時須要輸入具體的組織級別,在「權限」頁籤中單擊「更改權限數據」按鈕,系統將自動抓取該角色菜單中所分配的全部事務碼所對應的權限對象,會彈出一個定義組織級別對話框,要求用戶輸入具體的業務數據控制範圍,如:
爲權限字段分配值能夠是單個值,也能夠是某個取值範圍,輸入符號「*」表示爲該字段容許全部值,也能夠單擊對話框右下角的「徹底權限」按鈕,爲尚未分配的值的字段分配值。注:這個界面填充的值會帶到下一界面,也能夠在這裏什麼不輸,而是直接到下一界面輸入,這裏只是將所分配的事物碼所涉及的權限對象的權限字段集中在這是輸入值,只是爲了方便
SAP角色的權限分配是從權限對象直接派生過來的,能夠在不一樣的權限角色中同時調用同一權限對象,併爲所生成對象分配定義不一樣的權限值。
點擊「保存」後,SAP會將權限對象以及所維護的權限值以樹狀結構分層列出,最頂級爲對象類,對象類是同類屬性的權限對象的集合,一個對象類能夠包含多個權限對象。在權限角色維護頁面的主菜單中執行「實用程序|技術名稱打開」命令,將在每一個字段的右邊顯示全部的對象類名稱及權限對象名稱:
該界面經過狀態燈來表示各權限對象維護狀態,綠燈表明激活,黃色表示未激活,紅色表明未給權限字段分配值,單擊權限字段前的鉛筆能夠定義該字段的受權值:
權限對象維護完成後,節點的狀態燈會變爲綠色,單擊「保存」按鈕後會彈出一個「爲生成權限參數文件分配參數文件名稱」對話框:
再點擊,激活權限數據,返回到角色維護界面,能夠看到生成的權限參數文件:
先建立新的用戶 800USER02 但角色與參數文件都爲空:
(注:當角色建立好之後,除了在PFCG裏分給其餘用戶外,實質上能夠直接經過SU01來對某用戶進行角色的分配:
,當分配好角色時,該角色所帶的參數文件也會自動帶過來放在參數文件Tab中,但你也能夠在參數文件中還能夠直接將其餘的參數文件加進來,如SAP_ALL、SAP_NEW參數文件)
因爲沒有賦任何權限,因此此時800USER02沒有任何權限:
單擊「用戶比較」按鈕,將彈出「比較角色用戶主數據記錄」對話框:
點擊「完成比較」,該用戶所對應的權限角色將正式生效。
完成後,再去查看 800USER02 用戶的角色與參數文件頁籤,發現已關聯上了:
經過上面的設置後,800USER02用戶纔有權執行VA0一、VA02兩個事務碼,可是,因爲前面數據權限字段「銷售憑證類型」沒有設置任何值,因此在建立時仍是會報錯:
能夠將該憑證類型值加上便可:
前面已經介紹瞭如何在權限角色中維護SAP所提供的標準權限對象,本節介紹如何自定義權限對象。
SU20:權限字段清單,能夠新增、修改、刪除權限字段,能夠瀏覽該字段具體被哪些權限對象所調用。
SU21:維護權限對象,能夠建立和維護權限類、權限對象,權限字段在該事務碼中被分配到權限對象
SU22:維護權限對象的分配,能夠經過該事務碼爲具體事務分配權限對象
建立權限字段:
對象類是多個權限對象的集合,而一個權限對象又能夠分配多個權限字段,對象類和權限對象都是經過事務碼SU21來維護的。
一旦新增了用戶的自定義權限對象後,須要單擊工具欄中的按鈕,將把新增的權限對象賦值給 SAP_ALL 這個權限參數文件。
建立對象類:
建立權限對象:
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.
控制用戶是否能夠修改、建立、查看報表
上面(爲角色分配菜單權限/爲角色分配權限數據)是根據你選擇的事務碼(菜單)後,再進「權限」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 這個事務代碼是必須的,用它來打開查詢分析器的代碼。
自定義的權限和基於模板的同樣。
分析受權:限制報表用戶只能看那些數據?
執行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.
在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,則會顯示權限評估檢查結果:
如:查看某個事務代碼被分配到了哪些角色:SUIM