Oracle 如何确定选择授权是直接获得还是通过角色获得

Oracle 如何确定选择授权是直接获得还是通过角色获得,oracle,Oracle,Oracle中的一个缺陷是,如果在SQLplus中运行查询,有时可以从表中进行选择,但从存储过程中运行查询时则不能。为了从存储过程运行查询,您需要对象的直接授权,而不是通过角色获得的授权 如果我在“所有表”视图中看到一个表,我如何知道我是因为直接授权还是因为角色授权才能看到该表?查看所有选项卡的权限: select grantee from all_tab_privs where table_schema = 'SCOTT' and table_name='EMP' and privilege

Oracle中的一个缺陷是,如果在SQLplus中运行查询,有时可以从表中进行选择,但从存储过程中运行查询时则不能。为了从存储过程运行查询,您需要对象的直接授权,而不是通过角色获得的授权

如果我在“所有表”视图中看到一个表,我如何知道我是因为直接授权还是因为角色授权才能看到该表?

查看所有选项卡的权限:

select grantee from all_tab_privs 
where table_schema = 'SCOTT' and table_name='EMP'
and privilege = 'SELECT';

这将显示所有被授权人,无论是角色还是用户。

一种方法可以准确查看过程将看到的内容,即发出以下命令:

SET ROLE none

它会禁用当前会话的所有角色。

这似乎就是我要找的。它只显示那些我有选择权限的表。谢谢