我们希望在存储过程上授予用户execute
,该存储过程将访问某些表,但阻止该用户对同一个表执行直接查询。
这是我们目前的型号。用户foo
是存储过程的所有者。它对所有必需的表具有直接选择,插入,更新和删除权限。已使用AUTHID CURRENT_USER
创建存储过程。 Foo
将execute
的存储过程授予用户bar
。
用户bar
通过上面的拨款调用存储过程。按照设计,它无法更改任何存储过程的源代码。它可以通过角色访问必要的表格。
到目前为止,这很好。现在我们有了新的要求。必须创建一个可以执行存储过程的新用户,但不能直接查询这些表(通过SQLPlus,JDBC,ODBC等)。
我看不出任何明显的方法来实现这一点。欢迎所有建议。
答案 0 :(得分:3)
如果foo
拥有的过程被定义为authid definer
(默认值),则调用者不需要基础表上的特权来执行存储过程。通常,这就是在Oracle中管理权限的方式。使用authid current_user
存储过程有点不常见,因为除了基础表的特权之外,它还强制调用者拥有存储过程的特权。
您需要修改现有程序,以便它们是定义权限存储过程,或者您需要创建一组单独的定义权限存储过程授予新用户访问权限。