首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Oracle的DELETE任何表特权使来自其他模式的物化视图在ALL_MVIEWS中可见?

为什么Oracle的DELETE任何表特权使来自其他模式的物化视图在ALL_MVIEWS中可见?
EN

Stack Overflow用户
提问于 2022-11-17 12:02:44
回答 1查看 27关注 0票数 0

在Oracle 19.17 SE独立数据库上,已在几种不同模式中创建了物化视图。没有被授予权限的架构(用户)在ALL_MVIEWS中只显示它自己的物化视图。当授予相同架构特权删除任何表时,将返回属于所有架构的物化视图。

代码语言:javascript
复制
DGSW@atest19> select privilege from user_sys_privs order by 1;  
  
PRIVILEGE  
----------------------------------------  
ALTER SESSION  
CREATE ANY TABLE  
CREATE CLUSTER  
CREATE DATABASE LINK  
CREATE INDEXTYPE  
CREATE MATERIALIZED VIEW  
CREATE OPERATOR  
CREATE PROCEDURE  
CREATE SEQUENCE  
CREATE SESSION  
CREATE SYNONYM  
CREATE TABLE  
CREATE TRIGGER  
CREATE TYPE  
CREATE VIEW  
  
15 rows selected.  
  
DGSW@atest19> select owner,count(*) from all_mviews group by owner order by 1;

no rows selected

SYSTEM@atest19> grant DELETE ANY TABLE to dgsw;

Grant succeeded.

DGSW@atest19> select privilege from user_sys_privs order by 1;  
  
PRIVILEGE  
----------------------------------------  
ALTER SESSION  
CREATE ANY TABLE  
CREATE CLUSTER  
CREATE DATABASE LINK  
CREATE INDEXTYPE  
CREATE MATERIALIZED VIEW  
CREATE OPERATOR  
CREATE PROCEDURE  
CREATE SEQUENCE  
CREATE SESSION  
CREATE SYNONYM  
CREATE TABLE  
CREATE TRIGGER  
CREATE TYPE  
CREATE VIEW  
DELETE ANY TABLE  
  
16 rows selected.  
  
DGSW@atest19> select owner,count(*) from all_mviews group by owner order by 1;  
  
OWNER                            COUNT(*)  
------------------------------ ----------  
REGRESSION_1_6                          7  
REGRESSION_1_7                          7  
REGRESSION_1_8                          9  
REGRESSION_1_9                          9  
TEST1                                  10  
TEST2                                  10  
TEST3                                  10  
TEST4                                  10  
UI_TEST                                10  
VALIDATION1                             9  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-17 12:46:46

因为这个视图就是这样写的。如果使用以下代码查看源代码:

代码语言:javascript
复制
select text_vc from all_views view view_name = 'ALL_MVIEWS';

然后,您将看到它基于DBA_MVIEWS --显然包括所有物化视图--对几个方面进行了过滤,比如您是所有者或:

代码语言:javascript
复制
        or /* user has system privileges */
        exists ( select null from v$enabledprivs
                 where priv_number in (-45 /* LOCK ANY TABLE */,
                                       -47 /* SELECT ANY TABLE */,
                                       -397/* READ ANY TABLE */,
                                       -48 /* INSERT ANY TABLE */,
                                       -49 /* UPDATE ANY TABLE */,
                                       -50 /* DELETE ANY TABLE */)
               )

因此,它明确表示,如果您拥有任何ANY特权,则包括所有这些特权。

为什么他们选择这样做,只有甲骨文自己才能真正回答。但是,由于物化视图实际上是具有专门更新机制的表,这似乎并不不合理。SELECT ANY TABLE应该允许您查询任何物化视图,因此说它们都应该让您看到物化视图的存在并不是一大飞跃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74475140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档