我拥有通过Oracle角色授予的SELECT权限,我可以在特定表中查看数据。 (我的acc具有(或属于)已为特定表授予SELECT prvilege的角色。)
但是为了使VIEW或PROCEDURE能够从同一个表中选择数据,我必须直接向我的acc授予SELECT权限!
为什么?为什么通过角色授予SELECT权限还不够?
答案 0 :(得分:0)
在PL / SQL过程中关闭角色。您可以使用
模拟您在没有角色的情况下看到的内容SET ROLE NONE;
您可以使用
查看当前的角色SELECT * FROM session_roles;
重新开启:
SET ROLE ALL;
我不知道Oracle是否曾说明角色关闭的原因。我一直认为它可以提高性能。在每次执行之前,检查您是否可以访问查询中的所有表。如果您允许可以授予其他角色的角色,则需要相当复杂的树/图查询来确定访问是否正常。仅使用直接权限,这具有线性复杂性。