暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle DBA_TAB_PRIVS中的对象引用,但DBA_OBJECTS中没有对象

askTom 2021-09-07
1566

问题描述

我在DBA_TAB_PRIVS中发现了在DBA_OBJECTS中没有相应记录的记录。

select * from dba_tab_privs where owner='ODSMGR' and table_name like 'BIN$%';
复制

返回对表定义的权限。

select * from dba_objects where owner='ODSMGR' and object_name like 'BIN$%';
复制

不返回任何记录。

此数据库中有一个进程正在尝试为dba_tab_prips中找到的PRIs来处理REVEY语句,但是语句会爆炸,因为对象似乎不存在(在DBA_OBJECTS中)。如果这些语句没有出现在DBA_TAB_PRIVS中,我如何处理它们(以将它们从DBA_TAB_PRIVS中取出)目标?

谢谢

专家解答

BIN$前缀用于回收站中的表。

在删除表之后,缺省情况下,数据库将其放在回收站*中。这使您能够快速恢复它(使用闪回表...如果你犯了一个错误!

数据库保留所有权限、索引等。与表关联,以使此恢复尽可能平稳。

您可以查询回收站以检查其中有哪些对象:

create table t (
  c1 int
);
insert into t values ( 1 );
commit;
grant select on t to u;

drop table t;

select table_name from dba_tab_privs 
where  table_name like 'BIN$%';

TABLE_NAME                       
BIN$y3nmmCjgXJXgUwsAAAqPuw==$0 

select * from dba_objects 
where  object_name like 'BIN$%';

no rows selected

select object_name 
from   recyclebin
where  original_name = 'T';

OBJECT_NAME                      
BIN$y3nmmCjgXJXgUwsAAAqPuw==$0  
复制


How can I process these REVOKE statements (to get them out of DBA_TAB_PRIVS) when they don't show up in DBA_OBJECTS?

您不应该这样做,因为如果您想取消删除该表,您几乎肯定也要恢复特权。

如果您绝对必须这样做,则可以通过引用对象名称来执行此操作:
revoke select on "BIN$y3nmmCjgXJXgUwsAAAqPuw==$0" from u;

select table_name from dba_tab_privs 
where  table_name like 'BIN$%';

no rows selected
复制


或者-如果你确定don't要恢复这些表-您可以清空回收站:

select object_name 
from   recyclebin
where  original_name = 'T';

OBJECT_NAME                      
BIN$y3nmmCjgXJXgUwsAAAqPuw==$0

purge recyclebin;

select object_name 
from   recyclebin
where  original_name = 'T';

no rows selected
复制


如果需要,您可以清除特定的表、表空间和索引,而不是清除全部。

*如果禁用了回收站,或者在删除表时添加了清除子句,则将永久删除
文章转载自askTom,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论