Oracle PL / SQL:检索帐户的权限过程列表

时间:2010-02-12 17:07:57

标签: oracle plsql permissions

我在这里和其他地方进行了研究,但未找到以下答案。

我想获得我的应用程序的Oracle帐户可用的所有程序的列表(AFAIK,它们是一个程序包的一部分),并在sqlplus中尝试了以下命令:

 SELECT * from user_procedures;

然而,这只返回一行/过程,而实际上应用程序可能会定期调用(成功)20多个过程。我可以查看源代码并提取所有存储过程名称,但我想使用上面的内容并查看它的工作原理,并作为进一步检查db以帮助调试的基础(而不是总是需要例如,运行应用程序或编写测试客户端代码。

上述声明是否仅返回我的帐户明确拥有的程序,还是应该显示帐户有权访问的任何内容? [我不熟悉Oracle的特定功能。]

我尝试过其他变种;例如,引用'dba_procedures'导致'表或视图不存在错误。'

所有这些症状都是我的应用程序的Oracle帐户(我用来通过sqlplus连接)的权限有限的结果吗?

[背景:功能失调的环境 - 直接访问DBMS及其外部所有者非常有限,因此我希望能够增加对数据库设计的理解,并在没有帮助的情况下获取所需信息。] < / p>

3 个答案:

答案 0 :(得分:4)

您可以看到可以执行哪个独立程序:

select ao.object_type, ao.owner ||'.'|| ao.object_name
from all_objects ao, user_tab_privs utp
where ao.object_type = 'PROCEDURE'
and utp.owner = ao.owner
and utp.table_name = ao.object_name
and utp.privilege = 'EXECUTE';

但是如果它们在一个包中你不能直接看到程序名称,AFAIK,但你可以看到你可以用这个执行哪个包:

select ao.object_type, ao.owner ||'.'|| ao.object_name
from all_objects ao, user_tab_privs utp
where ao.object_type = 'PACKAGE'
and utp.owner = ao.owner
and utp.table_name = ao.object_name
and utp.privilege = 'EXECUTE';

然后您可以对包进行描述,以查看其中的各个过程和函数。我想这可能是在数据字典中的某个地方,但是不要把它放在手边......

答案 1 :(得分:1)

user_procedures是一个系统视图,它包含某个模式(用户)拥有的所有过程。不是模式(用户)被授予执行的那些。

您可以尝试DBMS_METADATA.GET_GRANTED_DDL存储过程。你可能会发现一些有用的东西。但是我不知道在你的应用程序中运行它需要什么样的权限。

希望它有所帮助。

答案 2 :(得分:1)

如果程序是程序包的一部分(即您通过PACKNAME.PROCNAME调用它们,那么您在程序包上有一个全有或全无的授权,而不是程序包中的单个程序。

相关问题