请教:授权后仍报ora-00942错误?

[复制链接]
查看11 | 回复9 | 2012-10-9 18:05:37 | 显示全部楼层 |阅读模式
我建了一个用户tmp并已授权。
grant dba, resource, connect, select any table to tmp;
然后,我在sql * plus 窗口中查询:
select t.VALUE from v$parameter t where t.NAME = ''db_block_size';
上面的sql语句是可以查到数据的,
但是我在存储过程里运行同样的sql语句却不行
begin
v_sqlstr := 'select t.VALUE from v$parameter t where t.NAME

= ''db_block_size''';
execute immediate v_sqlstr into v_DB_BLOCK_SIZE;
end;
报ora-00942错误:表或视图不存在。
表v$parameter是系统表确实存在,而且已经授权给tmp用户了,为什么单独在sql*plus窗口中执行,而在存储过程中执行就不行。
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
应用在sp中,存在“显式授权”的问题。
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
grant select on v_$parameterto tmp;
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
最初由 cjf107 发布
[B]应用在sp中,存在“显式授权”的问题。 [/B]

如果要是在过程、函数中引用是需要单独授权的。
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
角色权限在存储过程中无效
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
谢谢,已解决。
但有一个问题不明白:
被授权的用户tmp选择的表为v$parameter ,而sys授权的表却为v_$parameter.
是不是系统表在sys使用时可使用v$parameter 和v_$parameter ,但在授权时只能使用v_$parameter和逐个授权,而不能使用select any table to tmp?
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
v$parameter is a synonym for sys.v_$parameter .
in this case, those two listed below are the same
grant select on v_$parameter to tmp;
or
grant select on v$parameter to tmp;
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
OCP9i ,MCAD,MCSD.NET,MCDBA







辦了移民到澳州吧
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
虽然v$parameter是v_$parameter的同义词,
但使用sys授权,只能用v_$parameter,而不能用v$parameter
----------------------------------------------------------------------------------------------------
SQL> grant select on v$parameter to tmp;
grant select on v$parameter to tmp

*
第 1 行出现错误:
ORA-02030: 只能从固定的表/视图查询
SQL> grant select on v_$parameter to tmp;
授权成功。
回复

使用道具 举报

千问 | 2012-10-9 18:05:37 | 显示全部楼层
eygle的深入湷鯫racle P103有這樣一句話:
除了SYS用戶以外,其他用戶不能查詢V$視圖,V$視圖也不能被授權給其他用戶。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行