查询过程中的计算视图

2020-09-19 20:33发布

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

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


你好

我创建了以下目录过程:

创建过程XXXXXXXX(在GGGGMM整数中,在ID_IZPILDES_LAIKS整数中)
 语言SQLSCRIPT AS

 开始

 插入YYYYYYYY(ID_IZPILDES_LAIKS,ID_NODOKLMAKS,GADS_MENESIS,ID_KRITERIJS,VERTIBA)
      SELECT:ID_IZPILDES_LAIKS,
             NM_ID,
             :GGGGMM * 100 +1 AS GADS_MENESIS,
             KRIT_ID,
             SUM(KRIT_VERTIBA)
      FROM" _SYS_BIC"。" ZZZZ/BBBB"(PLACEHOLDER。" $$ PERIODS $$" =>:GGGGMM)
      GROUP BY GADS_MENESIS,KRIT_ID,NM_ID;
 结束;
 

如您所见,过程使用计算视图。 我可以将其称为过程的创建者/所有者,但是不能将此过程的 EXECUTE 权限授予其他用户。 我得到的错误看起来像这样:

特权不足:未获得授予该过程特权的权限

即使我授予整个架构的 EXECUTE 权限,用户仍然无法调用该过程。 他遇到错误:

权限不足:未经授权

其他用户可以查询计算视图,甚至可以在表上执行 INSERT 语句。 但是,当我将 INSERT 语句放入过程中时,我无法授予权限和/或以其他用户身份执行它。

是因为计算视图吗? 我会错过某些特权吗?

我还在一个软件包中创建了一个存储过程,此问题已解决,但我想知道它不起作用的原因。 此过程与我使用的其他过程之间的唯一区别是,它使用的是计算视图,而不是常规的表/视图。 这是唯一的方法吗?

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

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


你好

我创建了以下目录过程:

创建过程XXXXXXXX(在GGGGMM整数中,在ID_IZPILDES_LAIKS整数中)
 语言SQLSCRIPT AS

 开始

 插入YYYYYYYY(ID_IZPILDES_LAIKS,ID_NODOKLMAKS,GADS_MENESIS,ID_KRITERIJS,VERTIBA)
      SELECT:ID_IZPILDES_LAIKS,
             NM_ID,
             :GGGGMM * 100 +1 AS GADS_MENESIS,
             KRIT_ID,
             SUM(KRIT_VERTIBA)
      FROM" _SYS_BIC"。" ZZZZ/BBBB"(PLACEHOLDER。" $$ PERIODS $$" =>:GGGGMM)
      GROUP BY GADS_MENESIS,KRIT_ID,NM_ID;
 结束;
 

如您所见,过程使用计算视图。 我可以将其称为过程的创建者/所有者,但是不能将此过程的 EXECUTE 权限授予其他用户。 我得到的错误看起来像这样:

特权不足:未获得授予该过程特权的权限

即使我授予整个架构的 EXECUTE 权限,用户仍然无法调用该过程。 他遇到错误:

权限不足:未经授权

其他用户可以查询计算视图,甚至可以在表上执行 INSERT 语句。 但是,当我将 INSERT 语句放入过程中时,我无法授予权限和/或以其他用户身份执行它。

是因为计算视图吗? 我会错过某些特权吗?

我还在一个软件包中创建了一个存储过程,此问题已解决,但我想知道它不起作用的原因。 此过程与我使用的其他过程之间的唯一区别是,它使用的是计算视图,而不是常规的表/视图。 这是唯一的方法吗?

付费偷看设置
发送
2条回答
黑丝骑士
1楼 · 2020-09-19 21:05.采纳回答

这是由于对象激活在SAP HANA中的工作方式所致。

内部用户_SYS_REPO创建存储库工件的运行时版本。 然后,这些对象归_SYS_REPO所有。

为了向任何用户提供访问权限,_SYS_REPO将这些特权授予激活对象的用户以及所有角色对象。 _SYS_REPO要求具有GRANT OPTION的特权才能执行激活和进一步的特权授予,但它不会授予GRANT OPTION的那些特权。

底线:您的用户可以选择计算视图,但不能将特权授予其他人(运行过程所需)。

当_SYS_REPO激活该过程时,该问题消失了,因为该用户具有WITH GRANT OPTION特权。

这是无论如何开发程序的推荐方法。

如果您绝对想将GRANT OPTION的特权强制给其他用户,那也是可能的。 在我的博客文章此处

SAP浪
2楼-- · 2020-09-19 21:08

感谢您的回复。 我想我现在明白了。 我还阅读了您的博客文章,并尝试通过将 SQLScript过程与DEFINER RIGHTS 一起使用来授予特权。 它起作用了,但是我想在这种情况下,我将坚持使用存储库过程而不是使用目录过程。

一周热门 更多>