如果对象由_SYS_REPO拥有,如何使用GRANT OPTION授予访问权限

2020-08-18 18:28发布

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

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


我们已经将SCHEMA'S1'和TABLE'T1'创建为存储库对象。 因此,对象归_SYS_REPO所有。 考虑具有2个用户USER_A和USER_B的方案。 我们运行了GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT过程,向两个用户授予了对模式S1的SELECT访问权限。

USER_A使用表T1创建视图'V1',并且能够在V1上执行SELECT。 他将V1上的SELECT授予USER_B。

USER_B在" V1"上执行SELECT。 由于权限不足而失败。 我相信_ SYS_REPO需要在USER _B下面的命令下运行,才能执行SELECT

通过GRANT选项将S1上的GRANT SELECT授予USER_A;

由于我们无法使用_ SYS _REPO登录,因此我们唯一的选择是执行GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT过程。 程序似乎没有通过" WITH GRANT OPTION"授予访问权限。 知道在_ SYS _REPO拥有的对象的情况下如何实现此目标吗?

谢谢

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

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


我们已经将SCHEMA'S1'和TABLE'T1'创建为存储库对象。 因此,对象归_SYS_REPO所有。 考虑具有2个用户USER_A和USER_B的方案。 我们运行了GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT过程,向两个用户授予了对模式S1的SELECT访问权限。

USER_A使用表T1创建视图'V1',并且能够在V1上执行SELECT。 他将V1上的SELECT授予USER_B。

USER_B在" V1"上执行SELECT。 由于权限不足而失败。 我相信_ SYS_REPO需要在USER _B下面的命令下运行,才能执行SELECT

通过GRANT选项将S1上的GRANT SELECT授予USER_A;

由于我们无法使用_ SYS _REPO登录,因此我们唯一的选择是执行GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT过程。 程序似乎没有通过" WITH GRANT OPTION"授予访问权限。 知道在_ SYS _REPO拥有的对象的情况下如何实现此目标吗?

谢谢

付费偷看设置
发送
4条回答
亦是此间程序员
1楼-- · 2020-08-18 19:33

Project Aurora :作为一种解决方法,您可以使用" SQL SECURITY DEFINER"定义存储库过程,该过程将使用 授予选项。 通过定义的" SQL SECURITY DEFINER",将以_SYS_REPO权限执行该过程。

要做的步骤:

  • 创建过程。
  • 使用过程GRANT_PRIVILEGE_ON_ACTIVATED_CONTENT向所需的用户/角色授予新过程的EXECUTE特权。
  • 执行执行带有GRANT选项的过程。 。

该过程的简单示例为:

过程" MISC"。" test.misc.procedures :: P_GRANT_WITH_GRANT_OPTION"(在用户nvarchar(256中 ))
 语言SQLSCRIPT
 SQL安全定义器
 如
 开始
   声明stmt nvarchar(1000);
  
    为sql_error_code 10001声明mycond条件;
    如果is_sql_injection_safe(user)<> 1,则
       信号mycond设置message_text ='用户参数不安全的SQL注入';
    万一;
  
   stmt ='将GRANT SELECT ON" test.misc.data::test"转换为'|| 用户||  '有选择权';
   exec stmt;
 结束;
 

对于动态SQL注入一如既往:确保您不会遇到SQL注入问题。

暮风yp
2楼-- · 2020-08-18 19:15

嗨,Milind,

"我相信SYSTEM 用户ID在_SYS_REPO模式上已经具有GRANTABLE OPTION。因此,SYSTEM可以将对象授予SUMIT。"

否,SYSTEM在_SYS_REPO上没有GRANTABLE OPTION

派大星 ヾ
3楼-- · 2020-08-18 19:21

你好,

我认为我理解这个问题。

您不必登录_SYS_REPO即可授予对存储库对象的访问权限。 实际上,任何具有ROLE ADMIN特权的用户ID(例如SYSTEM)都可以完成此工作。

(我希望您已经理解了需要使用Grant选项的原因)

有关详细信息,请阅读此处。

我在下面为自己进行了测试,以确认这一点。

< p>使用SYSTEM我通过授予选项授予了我自己的存储库访问权限(SUMIT)。

PS:请告诉我是否有帮助。

小熊yu生菜
4楼-- · 2020-08-18 19:12

嗨,

如果仅授予使用两个程序_SYS_REPO.GRANT_SCHEMA_PRIVILEGE_ON_ACTIVATED_CONTENT通过存储库创建的SELECT模式访问权限,则他们已经有权选择任何对象。

仅具有选择访问权限的USER_A无法创建视图 在SCHEMA S1中使用CREATE VIEW创建,因此我假设他是在另一个架构中创建的,或者如果他在同一架构中创建了hdbview,那么USER_B的选择不会有问题。

如果他在另一个架构中创建了视图,请检查用户A是否具有对该架构的授予选项访问权限。 _SYS_REPO与此处无关。

一周热门 更多>