在某些情况下,关键数据和函数范畴必须得到保护,以防止数据的未授权访问。因此需要在程序中进行授权检查,以便用户访问已授权的领域。
授权的概念如下图所示:
下图是授权对象和授权的例子。
可以在对象类中定义授权对象。
定义授权对象时,必须指定相应字段(不含值)。依次向各字段赋值,创建实际授权。
可通过授权参数文件,将此授权集成到所需的用户主记录中。
可对一个授权对象创建多个不同的授权(用于集成到不同的用户主记录中)。
授权检查的原理如下图:
在运行时,可使用AUTHORITY-CHECK语句检查实际用户是否拥有在其用户主记录中执行函数所需的授权。可根据检查结果(sy-subrc),继续相应地执行程序:
Sy-subrc返回0,则用户拥有相应的权限。注意,如果用户没有相应的权限,需要提示用户。
在正常情况下,定义授权对象是数据建模及创建数据库表的环节之一。因为我们访问的是本课中的现有数据模型,因此使用属于此数据模型的授权对象S_CARRID。
注意:实施授权概念是编写数据库表访问程序的开发人员的工作之一。诸如定义授权和参数文件以及设计用户主记录等后续步骤则属于管理员的工作。
显示授权对象
在sap系统中可以使用su21显示授权对象。
在程序中实施所需的授权检查前,必须首先确定各授权概念的结构(字段)。一个对象通常包含ACTVT(活动)字段以及另一个字段,由该字段(如carrid)指定待保护的数据类型(如物料编号、航空公司等)。这些授权字段的值可指定获权用户执行的活动。
授权检查的语法:
针对程序中的授权检查,指定将要在当前用户的主记录中检查的授权。通过指定授权对象、相关字段及相应的字段值指定授权。参考上图中的语法。
在我们的示例中,会检查用户是否拥有S_CARRID对象的授权,在该对象中,字段CARRID(航空公司)包含由用户输入的航空公司,字段ACTVT(活动)包含值“03”(显示)。在AUTHORITY-CHECK语句后,应检查返回代码并相应监督程序的后续处理情况。
注意:如果不想执行字段检查,则不要在AUTHORITY-CHECK语句中输入此字段,或输入DUMMY作为字段值。DUMMY是一种预定义描述,输入时不含引号。
抑制字段检查示例:调用变更事务时,系统应始终立即检查用户是否针对任何航空公司拥有任何变更授权。如果检查失败,将立即向用户输出相应消息。可利用以下语法实施此类检查:
.注意:ABAP程序中,推荐使用Pattern按钮。
下面是一个使用FunctionModule的一个例子。