SAP HANA XSA SPS03:SESSION_CONTEXT('XS_CLIENT')

2020-08-16 05:00发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 我试图理解这段视频结...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我试图理解这段视频"结构化的特权和角色",其中解释了我们如何使用角色中的值将其传递给特权。 (这是我带走的视频。如果我错了,请让我知道。)

但是我的第一个问题是select语句,因为在M_SESSION_CONTEXT表中找不到XS_CLIENT键。

https://youtu.be/yuPBSwBlFfo?t=909

https://github.com/SAP/hana-xsa-opensap-hana7/blob/master/db/src/roles/FLIGHT_PRIV.hdbanalyticprivilege

付费偷看设置
发送
8条回答
Cikesha
1楼 · 2020-08-16 05:40.采纳回答

您必须在用于创建UAA实例的xs-security.json中定义属性。

创建角色时,可以为属性提供静态值或对其进行映射 SAML属性。 值的填充方式如下:

但是任何使用此UAA和 分配了此角色的用户将自动填充此属性,并且该属性也将被推送到SESSION_CONTEXT中。

hengyuye
2楼-- · 2020-08-16 05:51

您好,托马斯,到目前为止一切正常。

但是在我们的案例中,确实存在一个问题,即我们需要能够过滤多个病人ID(请看截图)

"属性":[{
 " name":" PatientID",
 " description":" PatientID",
 " valueType":" int"
 }],

现在有问题了," SELECT STATMENT"应该是什么样子,以便我们可以将结果传递给where子句?

另一件事是,我们无法获得多个结果。 如果我们尝试一系列索引或更多索引,则结果始终为空。

console.log测试患者:

结果:1​​240

[{" JSON_VALUE((SELECT SESSION_CONTEXT('XS_PATIENTID')FROM DUMMY),'$ [0]')"" 1240"}]#

'$ [0,1]'->空

'$ [0至5]'->空

 let query =`SELECT *
 来自" TBASE.db.data::tbase.cds.PATIENT"
 在" PatientID"输入(SELECT JSON_VALUE((从DUMMY中选择SELECT SESSION_CONTEXT('XS_PATIENTID')))中,
 '$ [0 to 10]')FROM DUMMY)`;
 

还是我们必须使用JSON_QUERY以获得更多结果?

如果是,我们如何在where子句中将其用作子查询? 感谢您的帮助

路亽曱_Ryan
3楼-- · 2020-08-16 05:47

Well客户端必须是在xs-security.json中声明的属性,而Uaa的角色必须包含分配给该属性的值。 另外,您如何对此进行测试? 您无法通过数据库资源管理器对其进行测试,因为它不会与您的应用程序uaa一起运行。 我将在本系列后面的视频中展示所有这些内容,但是我们需要先了解一些Node.js。

愤怒的猪头君
4楼-- · 2020-08-16 05:37

通用提供程序可以检查范围,但不能检查特定的属性值。 为此,您需要编写一个出口代码-我想您正在尝试这样做。 您到底从哪里获得未经授权的? 您确定要在服务前使用应用路由器进行测试。 应用路由器绝对是执行重定向到XSUAA并处理和注入安全令牌的必要条件。 XSJS/XSODATA的Node.js模块本身不包含任何此功能。

绿领巾童鞋
5楼-- · 2020-08-16 05:45

仅从DUMMY中选择SESSION_CONTEXT('XS_PATIENTID')而不进行JSON处理,您会看到什么? 也许JSON的结构与我的示例不同(特别是如果它来自SAML映射而不是直接输入)。 还可以考虑在XSA级别中的属性到达SESSION_CONTEXT之前对其进行查看。 如果您将Express与UAA处理一起用作中间件,则可以从名为InfoInfo的变量中的请求对象中获取信息。 参见以下示例:

 app.get("/img/whoAmI",(req,res)=> {
 var userContext = req.authInfo; 
var结果= JSON.stringify({
userContext:userContext
});
res.type(" application/json")。status(200).send(result); });
太Q了
6楼-- · 2020-08-16 05:39

当我仅使用DUMMY中的SESSION_CONTEXT('XS_PATIENTID')时,它将返回" [" 1240"," 54"]"。

问题在于,我们仅在一个中央启动点使用Odata服务,因此我认为我可以使用具有结构化特权检查的视图。 这将对我们有很大帮助。

在node.js中,我们所做的几乎与您的示例相同。 在那里,读取用户上下文没有任何问题。

谢谢!

Haoba3210
7楼-- · 2020-08-16 05:31

您好 Thomas Jung 德克·拉施克

提前道歉,以重新开始有关该主题的讨论。

我遇到的问题与Dirk类似:xs-security.json已使用范围,属性和角色模板正确设置。 我的应用程序用户被分配给一个角色集合,该角色集合具有一个角色模板的实例和一个恒定值的属性,在这种情况下为BUKRS。 到目前为止,如果从选择权限的条件进行了硬编码过滤,则还可以从计算视图中的分析特权侧(包括此字段)建立并运行:)。

然后,在遵循Thomas的教程(在本文中引用的相同)之后,我尝试使用SESSION_CONTEXT(" XS_BUKRS"),但我得到了null。 已检查是否在SQL控制台会话M_SESSION_CONTEXT上进行查询,而BUKRS属性甚至都没有显示。

上面提到的有关手动创建UAA实例的步骤是我唯一不同的操作,在mta.yaml中为UAA资源提供了值./xs-security.json的参数路径。 我认为,只要能够在Cockpit级别查看应用程序的范围,属性和角色模板,UAA服务实例就可以很好地设置并且问题应该在其他地方...

如果您对在会话上下文中看到该属性的任何遗漏步骤或替代方法有所了解,您会好心告诉我吗?

先谢谢了,谢谢。

此致

Daniel

一周热门 更多>