授予执行存储过程的权限,而不授予对基础表的访问权限 – Oracle

我是Oracle(10g)的新手,我的背景是SQL Server.我有一个服务帐户,需要权限来执行存储过程,但没有别的.

我从这里看到如何为单个存储过程添加执行权限:
How do you grant execute permission for a single stored procedure?

假设我有一个存储过程GET_A(),它返回表A中SELECT的结果.我不想授予此用户直接查询表A的权限.授予执行GET_A()的权限是否足够?

我知道在SQL Server中,我可以授予角色访问特定视图和存储过程的权限,而无需授予基础表的权限.但是,我的内部DBA告诉我,Oracle无法做到这一点.

最佳答案
只要您的数据库组织方式使得有一个帐户是表和其他对象的所有者,并且您的应用程序使用单独的帐户连接,您就可以按照自己的意愿行事.

如果您在不同的所有者中组织了表和过程,则必须将所需的表授予过程所有者(直接授予).接下来,您可以将执行授予角色或用户.

只要您允许连接到对象所有者,您的安全性就会被破坏,因为在这种情况下,您始终可以使用所有者的所有对象(您是所有者,因此您可以使用它).

转载注明原文:授予执行存储过程的权限,而不授予对基础表的访问权限 – Oracle - 代码日志