2014-06-20 62 views
1

我们希望授予用户execute一个存储过程,该存储过程将访问某些表,但阻止同一用户对相同表执行直接查询。存储过程表安全

这是我们目前的型号。用户foo是存储过程的所有者。它具有对所有必要表格的直接选择,插入,更新和删除权限。存储过程已使用AUTHID CURRENT_USER创建。 Foo将其存储过程授予execute至用户bar。用户bar通过上面的授权调用存储过程。根据设计,它无法更改任何存储过程的源代码。它可以通过角色访问必要的表格。

到目前为止,这工作正常。现在我们有了一个新的要求。必须创建一个可以执行存储过程但不能直接对表进行查询的新用户(通过SQLPlus,JDBC,ODBC等)

我看不到任何明显的实现方法。所有建议都欢迎。

回答

3

如果foo拥有的过程被定义为authid definer,那么默认情况下,调用者不需要基础表上的特权来执行存储过程。通常情况下,这就是Oracle管理权限的方式。使用authid current_user存储过程的情况并不常见,因为这会强制调用方在存储过程上拥有对基础表的特权以外的权限。

您需要修改现有过程以使其成为定义者的权限存储过程,否则您需要创建一组单独的定义者权限存储过程,以使新用户可以访问该过程。