在Oracle 19.17 SE独立数据库上,已在几种不同模式中创建了物化视图。没有被授予权限的架构(用户)在ALL_MVIEWS中只显示它自己的物化视图。当授予相同架构特权删除任何表时,将返回属于所有架构的物化视图。
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 发布于 2022-11-17 12:46:46
因为这个视图就是这样写的。如果使用以下代码查看源代码:
select text_vc from all_views view view_name = 'ALL_MVIEWS';然后,您将看到它基于DBA_MVIEWS --显然包括所有物化视图--对几个方面进行了过滤,比如您是所有者或:
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应该允许您查询任何物化视图,因此说它们都应该让您看到物化视图的存在并不是一大飞跃。
https://stackoverflow.com/questions/74475140
复制相似问题