代码之家  ›  专栏  ›  技术社区  ›  Tom

Oracle:删除对象时是否删除了授予?

  •  3
  • Tom  · 技术社区  · 15 年前

    我目前有两个模式,A和B。

    B有一个表,A执行选择插入并更新它。

    在我们的SQL脚本中,我们已向授予权限,以便它可以完成其任务。

    grant select on B.thetable to A
    etc,etc
    

    现在,删除表'thetable',并且至少每天将另一个表重命名为b一次。

    rename someothertable to thetable
    

    这样做之后,当a在b.thetable上执行select时,我们会得到一个错误。

    ORA-00942: table or view does not exist
    

    执行drop+rename操作后,授权也可能丢失吗?

    我们必须再次分配权限吗?

    更新

    其他人没有赠款。

    更新2

    每天在“表”中插入数据的过程会每隔n个插入执行一次提交,因此无法执行任何回滚。所以我们用两张桌子。

    提前谢谢

    4 回复  |  直到 9 年前
        1
  •  7
  •   Peter Lang    15 年前

    是的,一旦你放下桌子,赠款也会被取消。

    您可以尝试创建一个 VIEW 从中选择 thetable 授予 SELECT 就这点而言。

    不过,我觉得你经常丢桌子的策略不太合适。你为什么要这么做?

    编辑

    有比每天丢掉桌子更好的方法。

    1. 将另一列添加到 可食性 说明行是否有效。

    2. 在该列上放置索引(或扩展用于从该表中选择的现有索引)。

    3. 向查询中添加另一个条件,以便只考虑“有效”行,或者创建一个视图来处理该行。

    4. 导入数据时,将新行设置为“新建”。导入完成后,可以删除所有“有效”行,并在单个事务中将“新”行设置为“有效”。

    如果导入失败,您可以回滚事务。

        2
  •  1
  •   DCookie    15 年前

    也许重命名表的过程也应该执行一个为您授予权限的过程?您甚至可以使用花哨的方法,查询字典中现有的赠款,并将它们应用到重命名的表中。

        3
  •  0
  •   FabienM    15 年前

    不: Oracle数据库自动将旧对象的完整性约束、索引和授予传输给新对象。 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9019.htm#SQLRF01608

    你一定还有别的问题

        4
  •  0
  •   Jon T    9 年前

    另一种方法是为正在进行的工作使用临时表。毕竟,听起来好像数据只是暂时的,至少在那个表中是这样的,并且您不必每次有一组新数据/创建新表时都重新应用授权。