从应用代码访问 all_mview 或 user_mviews

paw*_*que 3 oracle view

我需要访问 user_mviews 或 all_mviews 表以获取有关我的应用程序中物化视图的元信息。读取 user_mviews 表需要哪些授权?

Vin*_*rat 5

默认情况下,所有用户都可以阅读user_mviewsall_mviews视图,因为 SELECT 权限被授予public

SQL> SELECT grantee, privilege, table_name
  2    FROM dba_tab_privs
  3   WHERE table_name IN ('USER_MVIEWS', 'ALL_MVIEWS');

GRANTEE  PRIVILEGE  TABLE_NAME
-------- ---------- ------------
PUBLIC   SELECT     USER_MVIEWS
PUBLIC   SELECT     ALL_MVIEWS
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因此授权已被删除,您需要重新授予其中一个public或特定用户(具有 DBA 帐户)的权限:

GRANT SELECT ON user_mviews TO <user>;
Run Code Online (Sandbox Code Playgroud)

编辑:根据定义,USER_MVIEWS描述当前用户拥有的物化视图,同时ALL_MVIEWS描述当前用户可以访问的物化视图(用户需要直接或通过角色在 mview 上获得 SELECT 权限)。

  • 如果您以与 mview 所有者不同的用户身份进行连接,则它不会出现在“USER_MVIEWS”中,并且只有在您对 mview 本身具有权限时才会出现在“ALL_MVIEWS”中。确保将 mview 上的选择授予您正在连接的用户。 (3认同)
  • @lewap:文森特回答了你最初的问题,我刚刚解决了后续问题。除非你打算编辑这个问题,否则我会用这个作为答案。很高兴我能帮上忙。 (2认同)