Oracle中的一个缺陷是,如果您在SQLplus中运行查询,但有时您可以从表中进行选择,但在从存储过程运行查询时则无法从表中进行选择.要从存储过程运行查询,您需要直接授予对象,而不是通过角色获得的授权.
如果我在all_tables视图中看到一个表,我怎么知道我是否可以看到这个表是因为直接授权还是因为角色授予?
看看ALL_TAB_PRIVS:
select grantee from all_tab_privs
where table_schema = 'SCOTT' and table_name='EMP'
and privilege = 'SELECT';
Run Code Online (Sandbox Code Playgroud)
这显示了所有受助者,无论是角色还是用户.