首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用户却不可以?

为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用户却不可以?

作者头像
AiDBA宝典
发布2022-02-22 16:35:27
发布2022-02-22 16:35:27
2.6K00
代码可运行
举报
运行总次数:0
代码可运行
今天小麦苗给大家分享的是为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用户却不可以?

为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用户却不可以?

有学员提出了一个问题,

代码语言:javascript
代码运行次数:0
运行
复制
现象如下,难道SYSTEM比SYS用户的权限更大吗?

SYS@ora11g > grant select on v$session to lhr;
grant select on v$session to lhr
                *
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
SYS@ora11g > conn system/lhr
Connected.
SYSTEM@ora11g > grant select on v$session to lhr;
Grant succeeded.

如果SYSTEM不能对V$SESSION赋权,那么请执行以下命令:

代码语言:javascript
代码运行次数:0
运行
复制
GRANT SELECT ON SYS.V_$SESSION TO SYSTEM WITH GRANT OPTION;

这样SYSTEM就可以对V$SESSION赋权了。

对于该问题可以从以下视图中获得答案:

代码语言:javascript
代码运行次数:0
运行
复制
SYS@ora11g > col OWNER format a10
SYS@ora11g > col object_name format a15
SYS@ora11g > SELECT d.owner,d.object_name,d.object_type FROM Dba_Objects d WHERE d.object_name IN  ( 'V$SESSION','V_$SESSION');
OWNER      OBJECT_NAME     OBJECT_TYPE
---------- --------------- -------------------
SYS        V_$SESSION      VIEW
PUBLIC     V$SESSION       SYNONYM
SYS@ora11g > SELECT d.owner,d.synonym_name,d.table_owner,d.table_name FROM DBA_SYNONYMS D WHERE D.synonym_name IN  ( 'V$SESSION','V_$SESSION');
OWNER      SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME
---------- ------------------------------ ------------------------------ ------------------------------
PUBLIC     V$SESSION                      SYS                            V_$SESSION
SYS@ora11g > SELECT D.OWNER,
  2         D.NAME,
  3         D.TYPE,
  4         D.REFERENCED_OWNER,
  5         D.REFERENCED_NAME,
  6         D.REFERENCED_TYPE
  7    FROM DBA_DEPENDENCIES D
  8   WHERE D.NAME IN ('V$SESSION', 'V_$SESSION');
OWNER      NAME          TYPE               REFERENCED_OWNER    REFERENCED_NAME   REFERENCED_TYPE
---------- ------------- ------------------ ------------------- ----------------- ------------------
PUBLIC     V$SESSION     SYNONYM            SYS                 V_$SESSION        VIEW
SYS        V_$SESSION    VIEW               SYS                 V$SESSION         VIEW
SYS@ora11g > SYS@ora11g > SELECT * FROM V$FIXED_TABLE d WHERE d.NAME IN ( 'V$SESSION','V_$SESSION','GV$SESSION');
NAME                            OBJECT_ID TYPE   TABLE_NUM
------------------------------ ---------- ----- ----------
GV$SESSION                     4294951258 VIEW       65537
V$SESSION                      4294950919 VIEW       65537
SYS@ora11g >

通过以上查询可以看到,V$SESSION属于公共同义词,它来源于SYS.V_$SESSION私有视图,而该视图又来源于系统底层表SYS.VSESSION,而系统底层表SYS.VSESSION又来源于系统底层表SYS.GV

Oracle选择访问对象的顺序原则是先SCHEMA后PUBLIC。所以,对于SYS用户而言,他查询VSESSION视图其实是查询的系统底层表SYS.VSESSION。对于系统底层表,是不能直接做赋权操作的。所以,SYS用户在将该视图赋权给其他用户的时候就会报错。而对于SYSTEM用户而言,他查询V

& 说明:

有关Oracle同义词的更多内容介绍可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2154285/

有关Oracle数据字典的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2153324/

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 版权所有,欢迎分享本文,转载请保留出处

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档