Oracle10g 重新创建的对象的Oracle保留授权

Oracle10g 重新创建的对象的Oracle保留授权,oracle10g,oracle11g,Oracle10g,Oracle11g,我有一笔表T的补助金,我希望这笔补助金在以下情况下生效: drop table T; create table T(...); 有可能吗?来自(强调矿): 删除表会使依赖对象无效,并删除表上的对象权限。如果要重新创建该表,则必须重新授予该表的对象权限,重新创建该表的索引、完整性约束和触发器,并重新指定其存储参数。截断和替换都没有这些效果。因此,使用TRUNCATE语句删除行比删除和重新创建表更有效 因此,您需要在create table语句之后显式地将grant语句添加到脚本中。来自(强调项)

我有一笔表T的补助金,我希望这笔补助金在以下情况下生效:

drop table T;
create table T(...);
有可能吗?

来自(强调矿):

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

因此,您需要在
create table
语句之后显式地将
grant
语句添加到脚本中。

来自(强调项):

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


因此,您需要在
create table
语句之后显式地将
grant
语句添加到脚本中。

否。在删除对象时,该对象上的任何授权都将被删除。创建新对象时,即使该对象恰好与旧对象同名,也需要重新授予新对象上所需的任何权限。这就是删除并重新创建对象很少是个好主意的原因之一——为什么需要删除并重新创建表


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

否。在删除对象时,该对象上的任何授权都将被删除。创建新对象时,即使该对象恰好与旧对象同名,也需要重新授予新对象上所需的任何权限。这就是删除并重新创建对象很少是个好主意的原因之一——为什么需要删除并重新创建表


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

我可以不使用角色吗?或者有关已删除对象的信息也从角色中删除?@user1514042角色也不起作用。一种可能的解决方法是在视图中引入间接层:在要删除的表的顶部创建一个视图,然后授予该视图的权限。该视图虽然无效,但不会与其基表一起删除,并且该视图上的权限将保持不变。我可以不使用角色吗?或者有关已删除对象的信息也从角色中删除?@user1514042角色也不起作用。一种可能的解决方法是在视图中引入间接层:在要删除的表的顶部创建一个视图,然后授予该视图的权限。该视图虽然无效,但不会与其基表一起删除,并且该视图上的权限将保持不变。