3

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

B 有一个表,A 对其执行选择插入和更新。

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

grant select on B.thetable to A
etc,etc

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

rename someothertable to thetable

完成此操作后,当 A 对 B.thetable 执行选择时,我们会收到错误消息。

ORA-00942: table or view does not exist

是否有可能在执行 drop + rename 操作后,授权也会丢失?

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

更新

someothertable 没有赠款。

更新2

将数据插入“表”的日常过程每 N 次插入执行一次提交,因此无法执行任何回滚。这就是我们使用 2 个表的原因。

提前致谢

4

4 回答 4

7

是的,一旦你删除表,赠款也会被删除。

您可以尝试创建一个VIEW从中选择thetable和授予的选项SELECT

不过,你定期丢桌的策略对我来说听起来不太对劲。为什么你必须这样做?

编辑

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

  1. thetable如果该行有效,则向该状态添加另一列。

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

  3. 向您的查询添加另一个条件以仅考虑“有效”行或创建一个视图来处理它。

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

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

于 2010-02-14T22:18:56.577 回答
1

也许重命名表的过程还应该执行一个为您授权的过程?您甚至可以花哨并在字典中查询现有授权并将其应用于重命名的表。

于 2010-02-15T00:30:06.200 回答
0

否:“Oracle 数据库自动将旧对象的完整性约束、索引和授权转移到新对象。” http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9019.htm#SQLRF01608

你一定有另一个问题

于 2010-02-14T22:14:30.550 回答
0

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

于 2015-12-08T14:08:55.073 回答