The HR user creates a stand-alone procedure as follows and grants the EXECUTE privilege on the proce

The HR user creates a stand-alone procedure as follows and grants the EXECUTE privilege on the procedure to many database users: CREATE OR REPLACE PROCEDURE create_dept( v_deptno NUMBER, v_dname VARCHAR2, v_mgrNUMBER, v_loc NUMBER) as BEGIN INSERT INTO hr.departments VALUES (v_deptno, v_dname, v_mgr, v_loc); END; The users having permission to execute the procedure are able to insert records into the DEPARTMENTStable even though they do not have the INSERT privilege on the table. You want only those users whohave privileges on the DEPARTMENTS table to be able to execute the procedure successfully. What would you suggest to the PL/SQL developers to achieve this?
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: 错误,存储过程可单独创建,不需要放到包里,这样也不能实现题里的需求.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值