向其他用户授予对v $ session的SELECT访问权限

问题描述 投票:1回答:2

我想向Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production中的其他用户授予对v $ session的SELECT访问权限

但是当我运行这个查询时:

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

我收到了这个错误:

00942. 00000 -  "table or view does not exist"
oracle oracle11gr2
2个回答
4
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.