【问题标题】:GRANT Table Permissions for a limited amount of time在有限的时间内授予表权限
【发布时间】:2015-06-26 14:08:54
【问题描述】:

我有一个以特定用户身份运行的 plsql 作业,我需要执行授权以授予该用户对特定表的访问权限,直到作业完成。这项工作永远不会超过 30 分钟。

我的问题是,在 oracle 中,是否可以在有限的时间内授予特定用户对表的访问权限,或者我应该在作业完成后创建另一个函数来撤销权限?我进行了一些快速搜索,但找不到任何关于此的内容。有谁知道这是否可能?

如果我能在 30 分钟内全部授予,那就太棒了。

【问题讨论】:

  • 查看Oracle调度器。
  • 只为这个工作创建一个特殊用户怎么样?
  • 你使用的是 dbms_job 还是 dbms_scheduler?
  • 我建议使用函数/程序在表 (Access_tab) 中插入 id、start_time 和 end_time,同时授予用户访问权限。部署一个每 15 分钟运行一次的作业,该作业根据表 (Access_tab) 中指定的 end_time 撤销访问。这将减少撤销访问权限的人工干预。

标签: sql oracle plsql permissions sql-grant


【解决方案1】:

@ksa 的评论是对此的正确答案。您应该创建一个具有所需权限的新用户,并在该架构上定义此过程。然后您可以GRANT EXECUTE 将此过程分配给需要运行它的角色或用户。尽管它是默认值,但您也可以显式指定AUTHID DEFINER。从本质上讲,这意味着无论谁调用它,该过程都作为定义器运行。它使您免于任何时间/安排问题,并且您的继任者可以清楚地获得权限。如果您不想在每次调用时都指定架构,您可以定义同义词。

【讨论】:

    【解决方案2】:

    plsql 中有一个方法叫做grantAccess()。它允许您提供用户被授予访问权限的秒数。

    因此,如果您想授予他们一年的访问权限,您可以编写以下代码:

    rightSideUser.grantAccess(31536000) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2016-08-24
      相关资源
      最近更新 更多