将SELECT权限授予其他用户访问v$session

5

我希望能够授权其他用户访问 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 中的 v$session 数据表。

但是当我运行以下查询时:

SELECT owner, object_type FROM dba_objects WHERE object_name = 'V$SESSION';

I got this error:

00942. 00000 -  "table or view does not exist"

2
除了下面的两个答案之外,如果您收到此消息,那么很可能意味着您不是DBA。SELECT owner, object_type FROM all_objects 将起作用,但您将仅收到与您被允许查看的对象相对应的有限子集。 - Thomas G
2个回答

10

Oracle v$视图的名称为V_$VIEWNAME,它们在格式上有同义词V$VIEWNAME,并且您无法在同义词上授予权限。如果您想要授予对V$视图的权限,则必须按照以下方式授予:

SQL> grant select on v_$session to hr;

0
我们还需要一个没有访问v$session权限的普通用户来清理会话。函数将以拥有模式的特权执行,因此如果您将函数创建为具有访问V$SESSION权限的用户,则可以从没有所需特权的用户执行它。
例如,IFH_OWNER可以访问v$session,而用户id854812不能:
作为id854812:
select count(*) from v$session
ORA-00942: table or view does not exist

作为IFH_OWNER:

select count(*) from v$session
56

create or replace function getSessionCount return int
as
  vCnt int;
begin
  select count(*) into vCnt from v$session;
  return( vCnt);
end;

select getSessionCount from dual;
56

grant execute on getSessionCount to id854812;

作为 id854812:

select ifh_owner.getSessionCount from dual;
56

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接