A. Create the procedure with definer's right.
B. Create the procedure with invoker's right.
C. Grant the EXECUTE privilege with GRANT OPTION on the procedure to selected users.
D. Create the procedure as part of a PL/SQL package and grant the EXECUTE privilege on the packageto selected users.
存储过程的definer和invoker权限
【题意简述】HR用户创建了存储过程,内容是往部门表中插入数据,把存储过程的执行权限授予了一些用户,不管用户是否有部门表的insert对象权限,拥有存储过程执行权限的用户可以往部门表中插入数据,现在希望只有部门表的insert对象权限的用户可以成功执行存储过程,应该如何创建存储过程?
【原理概念】 在Oracle8i以前,所有已编译存储对象(包括packages, procedures, functions, triggers, and views)只能以定义者(Definer)身份解析运行;从Oracle8i开始,Oracle引入调用者(invoker)权限,使得对象可以以调用者身份和权限执行. 定义者(Definer):指编译存储对象的所有者.以这个存储对象拥有者的特权来执行它,也就是说,任何具有这个PL/SQL程序单元执行权限的用户都可以访问程序中的对象.所有具有执行权的用户都有相同的访问权限.ORACLE默认为定义者权限. 调用者(Invoker):指拥有当前会话权限的模式,调用者权限是指当前用户(而不是程序的创建者)执行PL/SQL程序体的权限.这意味着不同的用户对于某个对象具有的权限很可能是不同的,这个思想的提出,解决了不同用户更新不同表的方法. 在调用者(definer)权限下,执行的用户操作的schema为当前用户,所操作的对象是当前模式下的对象.在调用者(invoker)权限下,当前用户的权限为当前拥有的权限(含角色).
定义存储过程时,通过指定AUTHID 属性,定义DR Procedure 和IR Procedure DR Procedure: CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID DEFINER as ... BEGIN ... END DEMO; IR Procedure: CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID CURRENT_USER as ... BEGIN ... END DEMO;
A: 错误,应创建调用者权限,而不是定义者权限.
B: 正确.
C: 错误,默认是以定义者权限创建存储过程,那么有execute权限就可以向部门表insert数据 不能实现需求,grant option权限是指可以把存储过程权限授权给其它人.
D: 错误,存储过程可单独创建,不需要放到包里,这样也不能实现题里的需求.