希望这是一个快速的,我是oracle的新手,所以需要先检查一下它之前咬我的东西
好的,我有一个修改表的功能
如果我授予用户执行该功能的权限,他们还需要获得更新和插入表格的权限,还是他们被批准使用该功能的事实呢?
我问的原因是用户需要编辑这些表,但只能通过已批准的功能来执行复杂的验证,这些功能无法通过约束轻松完成
答案 0 :(得分:3)
这取决于您定义程序的方式,特别是AUTHID
property:
存储的PL / SQL单元的
AUTHID
属性会影响设备在运行时发出的SQL语句的名称解析和权限检查。
默认情况下,创建的过程的AUTHID
值为DEFINER
( definer右侧),执行的功能就像呼叫者暂时获得了定义器。
值为CURRENT_USER
时,AUTHID
属性将使程序在运行时检查调用者的权限。
在您的情况下,您描述的场景将适合DEFINER
的属性值(默认值):用户只能在不直接访问基础表的情况下调用过程和函数。文档中描述了类似的场景:
场景:假设您必须创建一个API,其过程对其表有不受限制的访问权限,但您希望阻止普通用户直接选择表数据,并通过INSERT,UPDATE更改它,和DELETE语句。
解决方案:在特殊架构中,创建表和构成API的过程。默认情况下,每个过程都是DR单元,因此创建它时无需指定AUTHID DEFINER。对于其他用户,授予EXECUTE特权,但不授予任何允许数据访问的权限。