Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1117987
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2010-10-11 13:46:56

有可能建立一个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表。
阅读(2622) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~