有可能建立一个oracle数据库用户,该用户只能执行package里的函数和存储过程,对其他资源包括此package能提取的表和视图都不能直接读取和修改吗?
针对这个问题做下面这个实验:
LDY用户下有一张表T001,只有2个字段,其中ID字段具有唯一值。
SQL> desc t001
名称 类型
--------- -------------
ID NUMBER(20)
NAME VARCHAR2(40)
在LDY用户下建立一个存储过程,该存储过程是通过ID号在T001表中查找相应的name内容,并输出。
create or replace procedure get_name(idn number)
is
cols_name varchar2(20);
begin
select name into cols_name from t001 where id=idn;
dbms_output.put_line(cols_name);
end;
/
另外建立一个用户TEST,该用户并不具有查询LDY.T001表的权限:
SQL> select count(*) from ldy.t001;
select count(*) from ldy.t001
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
在LDY用户下将存储过程get_name的权限赋给TEST用户:
SQL> grant execute on get_name to test;
授权成功。
在TEST用户下可以执行该存储过程,并且返回想要的结果:
SQL> set serveroutput on
SQL> exec ldy.get_name(29);
C_COBJ#
PL/SQL 过程已成功完成。
但是此时TEST用户仍然不能查询LDY.T001表。
阅读(2660) | 评论(0) | 转发(0) |