我有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权限,可以在下面看到。
答案 0 :(得分:2)
在较高环境中工作,唯一的区别是角色提供的赠款...在其他环境中,SELECT赠品直接在对象上提供。
如in the documentation(强调)所示:
包含视图的模式的所有者必须具有选择(
READ
或SELECT
特权),从所有表或视图中插入,更新或删除行所必需的特权。视图是基于的。 必须直接向所有者授予这些特权,而不是通过角色。
如果您仅通过角色授予对基础表的选择特权,则无法针对该表创建视图。即使您通常转为角色,也必须对要创建的任何视图都保留显式授予。
我想这与角色的工作方式有关。通过直接授予,Oracle知道您是否可以在其他模式中看到该表。如果您将视图上的select授予其他人,则当他们查询该视图时,Oracle会知道其中存在特权链。如果您在表上的直接授予被吊销,则存在使依赖对象无效的机制。但是撤消了角色在表上的选择特权。或您对角色的访问权限已被撤销;或仅在您自己的会话中,如果禁用该角色,应该怎么办-您仍然可以访问视图吗?乍看起来似乎有点复杂。
幸运的是,创建视图应该相对较少且可控制。通过角色访问表的大多数人都不需要在表上创建视图(我想是!)。
这里的另一个选项是在ARIEL
模式中创建视图,然后向APEX_ARIEL
和/或角色授予特权。是否合适取决于您的实际视图查询和创建视图的动机。