Oracle为重新创建的对象保留Grant

时间:2013-04-25 15:50:48

标签: oracle10g oracle11g

我已经获得了表格T的资助,我希望在以下情况之后获得此资助:

drop table T;
create table T(...);

有可能吗?

2 个答案:

答案 0 :(得分:2)

来自Oracle Database SQL Language Reference(强调我的):

  

删除表会使依赖对象无效并删除表中的对象权限。如果要重新创建表,则必须重新授予表的对象权限,重新创建表的索引,完整性约束和触发器,并重新指定其存储参数。截断和替换没有这些影响。因此,使用TRUNCATE语句删除行比删除和重新创建表更有效。

因此,您需要在grant语句后向您的脚本显式添加create table语句。

答案 1 :(得分:2)

没有。放下对象时,将删除该对象上的任何授权。创建新对象时,即使该对象恰好与旧对象具有相同的名称,您也需要在新对象上重新授予所需的任何权限。这是放弃和重新创建对象的一个​​原因很少是一个好主意 - 为什么你需要放弃并重新创建你的表?

当然,您可以在删除对象之前识别所有授权,然后在创建新对象后重新创建这些授权。您可以通过查询各种数据字典表(如dba_tab_privs)或使用dbms_metadata.get_dependent_ddl function获取授权的DDL来实现此目的。