了解基于数据库的访问控制,
Authorization Rules In CDS,及Access Conditions in DCL Sources。
该图显示了CDS访问控制的基本原理。一个新的存储库对象DCL源(或CDS访问控制)定义了CDS角色(关键字DEFINE ROLE…)。它将CDS角色与一个(或多个)CDS视图(关键字GRANT SELECT ON…)相关联,并定义此CDS视图的访问条件(关键字WHERE…)。每当ABAP程序访问此CDS视图时,数据库界面都会根据访问条件自动过滤选择结果。
注意: CDS访问控制仅在程序直接访问CDS视图时有效。如果通过另一个CDS视图间接访问CDS视图,则将忽略访问控制。
1.创建一个新的DCL源
1.现有软件包的名称右键,输入新DCL源的名称和描述
如果您的软件包已经包含DCL源,则可以使用以下快捷方式:
- 在项目资源管理器中,展开收藏包的子节点Core Data Services。
- 右键单击“访问控制”,然后选择“新建数据定义”。
2.CDS DCL语法
3.命名规则和建议
3.1.DCL源名称:
- 最多30个字符
- 在整个系统中都是唯一的
- 总是大写
3.2.CDS角色名称:
- 最多30个字符
- 在整个系统中都是唯一的
- 不区分大小写
- 可以与DCL源名称不同(不建议)
4.DCL源中的访问条件
DCL中的条件类型
存在以下在DCL中定义条件的方式
文字条件
- 将CDS视图的一个字段与文字值进行比较。
PFCG条件:
- 使用CDS视图的一个或多个字段在当前用户的主记录中查找授权。
- 一个PFCG条件始终基于一个授权对象。
- 左侧的视图字段分配给右侧的授权对象的字段。
PFCG条件示例
上例中的CDS角色包含两个PFCG条件。
第一个条件基于授权对象S_CARRID。在ABAP中,相应的AUTHORITY-CHECK语句如下所示
1 2 3 |
AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD view-carrid ID 'ACTVT' FIELD '03' |
第二个条件基于权限对象S_ COUNTER。该授权对象具有三个授权字段:CARRID,COUNTNUM和ACTVT。相应的AUTHORITY-CHECK语句如下所示:
1 2 3 4 |
AUTHORITY-CHECK OBJECT 'S COUNTER' ID 'CARRID' FIELD view-carrid ID 'COUNTNUM' FIELD view-counter ID 'ACTVT' FIELD '03' |
5.与授权相关的注释
DCL源中的注释
@ EndUserText.label:
- 角色的可翻译简短文本(与DDL Sources中相同)
@MappingRole
- 值为true:角色隐式分配给所有用户
- 值false:ABAP CDS当前不支持
6.DDL源中权限相关的注释
@ AccessControl.authorization
#CHECK:执行授权检查。如果未分配角色,则发出语法警告。
#NOT_REQUIRED:与#CHECK类似,但禁止显示语法警告
#NOT_ALLOWED:无授权检查。语法警告(如果已分配角色)