我正在尝试了解 Oracle 中的包权限。
如果用户 A 在用户 B 拥有/创建的包上被授予 EXECUTE 权限,并且该包对用户 B 拥有的表进行各种插入和更新,那么用户 A 是否还需要对底层对象的显式权限?
或者授予用户 B 拥有的包的 EXECUTE 权限是否意味着用户 A 可以做所有事情而无需用户 B 拥有的表的权限?
我正在尝试了解 Oracle 中的包权限。
如果用户 A 在用户 B 拥有/创建的包上被授予 EXECUTE 权限,并且该包对用户 B 拥有的表进行各种插入和更新,那么用户 A 是否还需要对底层对象的显式权限?
或者授予用户 B 拥有的包的 EXECUTE 权限是否意味着用户 A 可以做所有事情而无需用户 B 拥有的表的权限?
是与否
该
EXECUTE
权限仅授予用户 A 调用(执行)包的能力。它与底层对象的权限无关。用户 A 需要什么权限取决于
AUTHID
已编译包的行的值(以及 CBAC 是否生效)。定义者权利
这些包是那些授权线是
AUTHID DEFINER
(默认)代码只有Definer(用户B)的权限
用户 A 不需要基础权限。
调用者权利
这些是授权行是的包/过程/功能
AUTHID CURRENT_USER
该代码仅具有调用者(用户 A)的权限。
用户 A 将需要基础权限。
CBAC
CBAC === 基于代码的访问控制
CBAC 通常与调用者的权限代码结合使用以增强安全性。
Oracle 12c 引入了将角色授予包的功能。
在 CBAC 下,用户(暂时)拥有通过角色授予包的权限。
该代码仅具有授予角色的权限。
当且仅当适当的特权被授予被调用的包时,用户 A 才需要底层特权。
这允许开发人员(临时)仅将运行代码所需的必要权限授予调用代码的用户。
您可以在此处阅读有关 CBAC的更多信息
笔记
这适用于包和独立函数和独立过程