尽管有拨款,但无法创建Oracle View访问其他架构的对象

时间:2019-05-17 15:23:00

标签: oracle

我有2种模式:

ARIEL ARIEL_APEX

ARIEL_APEX可以访问ARIEL中的所有表,并且查询可以从ARIEL_APEX模式中运行。

例如

SELECT * FROM ARIEL.DIM_REGISTRATION_SET

在ARIEL_APEX模式下工作正常。

当我尝试在ARIEL_APEX中创建视图时

CREATE VIEW TEST_VIEW AS
SELECT * FROM ARIEL.DIM_REGISTRATION_SET

我明白了:

Error at Command Line : 465 Column : 23
Error report -
SQL Error: ORA-01031: insufficient privileges
01031. 00000 -  "insufficient privileges"
*Cause:    An attempt was made to change the current username or password
           without the appropriate privilege. This error also occurs if
           attempting to install a database without the necessary operating
           system privileges.
           When Trusted Oracle is configure in DBMS MAC, this error may occur
           if the user was granted the necessary privilege at a higher label
           than the current login.
*Action:   Ask the database administrator to perform the operation or grant
           the required privileges.
           For Trusted Oracle users getting this error although granted the
           the appropriate privilege at a higher label, ask the database
           administrator to regrant the privilege at the appropriate label.

这在测试和生产环境中绝对可以正常工作,这就是开发。 DBA说一切都好了。

ARIEL_APEX having below privileges.

GRANTEE                        PRIVILEGE
------------------------------ ----------------------------------------
ARIEL_APEX                     CREATE JOB
ARIEL_APEX                     CREATE MATERIALIZED VIEW
ARIEL_APEX                     CREATE TABLE
ARIEL_APEX                     CREATE OPERATOR
ARIEL_APEX                     CREATE VIEW
ARIEL_APEX                     CREATE TYPE
ARIEL_APEX                     CREATE SYNONYM
ARIEL_APEX                     CREATE CLUSTER
ARIEL_APEX                     CREATE DIMENSION
ARIEL_APEX                     CREATE TRIGGER
ARIEL_APEX                     CREATE SESSION
ARIEL_APEX                     CREATE INDEXTYPE
ARIEL_APEX                     CREATE PROCEDURE
ARIEL_APEX                     CREATE SEQUENCE

并且我们知道可以对ARIEL_APEX的ARIEL对象授予权限,因为我们可以手动执行查询。

这是Oracle12。在升级之前从未出现此问题,但是怀疑这与从视图中的另一个架构访问对象有关。

ARIEL_APEX是ANALYTICS_ROLE的成员,ANALYTICS_ROLE授予ARIEL模式中所有表上的select权限,可以在下面看到。

The grant is provided to the ANALYTICS_ROLE which grants SELECT access on all ARIEL tables.

The grants work, as can be seen by the direct execution of a query from the ARIEL_APEX schema of an ARIEL table. Error when trying to create a view around the working query.

1 个答案:

答案 0 :(得分:2)

  

在较高环境中工作,唯一的区别是角色提供的赠款...在其他环境中,SELECT赠品直接在对象上提供。

in the documentation(强调)所示:

  

包含视图的模式的所有者必须具有选择(READSELECT特权),从所有表或视图中插入,更新或删除行所必需的特权。视图是基于的。 必须直接向所有者授予这些特权,而不是通过角色。

如果您仅通过角色授予对基础表的选择特权,则无法针对该表创建视图。即使您通常转为角色,也必须对要创建的任何视图都保留显式授予。

我想这与角色的工作方式有关。通过直接授予,Oracle知道您是否可以在其他模式中看到该表。如果您将视图上的select授予其他人,则当他们查询该视图时,Oracle会知道其中存在特权链。如果您在表上的直接授予被吊销,则存在使依赖对象无效的机制。但是撤消了角色在表上的选择特权。或您对角色的访问权限已被撤销;或仅在您自己的会话中,如果禁用该角色,应该怎么办-您仍然可以访问视图吗?乍看起来似乎有点复杂。

幸运的是,创建视图应该相对较少且可控制。通过角色访问表的大多数人都不需要在表上创建视图(我想是!)。

这里的另一个选项是在ARIEL模式中创建视图,然后向APEX_ARIEL和/或角色授予特权。是否合适取决于您的实际视图查询和创建视图的动机。