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