sql - Oracle 在 DBA_ROLES 上的选择权限

I am connected into Oracle 10g database with user "user", when i run a select on DBA_ROLES it displays the result without any problem, but when the select is inside a procedure it returns the error ORA-00942:表或 View 不存在

用户是否缺少某些权限?为什么可以执行 SELECT 但不能将其包含在过程中?

SQL> SELECT COUNT(*) FROM DBA_ROLES;

  COUNT(*)
----------
        18

SQL> CREATE OR REPLACE PROCEDURE tst_role IS 
     v VARCHAR2(100);
BEGIN
        v := '';
        FOR rec IN (SELECT ROLE FROM DBA_ROLES) LOOP
                v := rec.role;
                DBMS_OUTPUT.put_line(v);
        END LOOP;
END;
/
Warning: Procedure created with compilation errors.

SQL> show errors
Errors for PROCEDURE TST_ROLE:

LINE/COL ERROR
-------- -----------------------------------------------------------------
5/13     PL/SQL: SQL Statement ignored
5/30     PL/SQL: ORA-00942: table or view does not exist
6/3      PL/SQL: Statement ignored
6/8      PLS-00364: loop index variable 'REC' use is invalid

最佳答案

在定义者权限存储过程中,您无权访问通过角色授予的特权。这很可能意味着您正在使用的任何 Oracle 用户都已通过角色而不是通过直接授权被授予对 DBA_ROLES 的访问权限。最有可能的是,您可以要求您的 DBA 授予您的帐户 SELECT ANY DICTIONARY 权限

GRANT SELECT ANY DICTIONARY
   TO your_oracle_user

您可以通过在 session 中禁用角色并验证是否收到错误来验证问题是否确实是通过角色授予的权限。如果你

SQL> set role none;
SQL> SELECT COUNT(*) FROM DBA_ROLES;

我敢打赌你会得到同样的 ORA-00942 错误。

https://stackoverflow.com/questions/15140230/

相关文章:

sql - 如何将日期时间字段添加到 + 1 天

java - 如何在其他计算机上运行java可执行文件

bash - 如何从 Bash 中的域获取主 MX IP

solr - 从 DocsAndPositionsEnum 检索所有术语位置

memory - 了解mmap

php - 通知 : unserialize() for symfony2 ( connection

string - 一组字符串的 R 直方图和描述性统计数据

performance - 如何减少此 Google Apps 脚本的执行时间?

google-apps-script - 在电子表格的 App 脚本中选择连续范围

sql - "column ambiguously defined"