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

2020-08-18 18:28发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们已经将SCHEMA'S1'和...

         点击此处--->   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条回答
亦是此间程序员
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注入问题。

一周热门 更多>