专栏首页小麦苗的DB宝专栏【DB笔试面试515】在Oracle中,为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用户却不可以

【DB笔试面试515】在Oracle中,为何SYSTEM用户可以将V$SESSION的查询权限赋权给其他用户而SYS用户却不可以

题目部分

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

答案部分

答案:现象如下,难道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赋权,那么请执行以下命令:

GRANT SELECT ON SYS.V_$SESSION TO SYSTEM WITH GRANT OPTION;

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

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

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.V$SESSION,而系统底层表SYS.V$SESSION又来源于系统底层表SYS.GV$SESSION。

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

& 说明:

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

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

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文分享自微信公众号 - DB宝(xiaomaimiaolhr),作者:小麦苗best

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DB笔试面试703】在Oracle中,怎么杀掉特定的数据库会话?

    “ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;”或者“ALTER SYSTEM DISCONNECT S...

    小麦苗DBA宝典
  • 【DB宝19】在Docker中使用MySQL高可用之MHA

    MHA(Master High Availability Manager and tools for MySQL)目前在MySQL高可用方面是一个相对成熟的解决...

    小麦苗DBA宝典
  • 【DB笔试面试859】在Oracle中,内核参数kernel.shmall、kernel.shmall等分别代表什么含义?

    在Oracle中,内核参数kernel.shmall、kernel.shmall、kernel.shmmni和kernel.sem分别代表什么含义?

    小麦苗DBA宝典
  • python的super()的作用和原理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇
  • Wojilu学习笔记 (02)

    阿炬
  • FME转换器介绍之(五)

    其实本来这周想休息一下再写的,但想想已经立了的Flag(十个转换器的推送),再看看已经写过的,已经有四个了,索性再写一个,凑够五个再休息!

    数据处理与分析
  • WordPress 网站基于REST API 开发“微信小程序”实战

    几周前,Jeff 花了两天将自己的WordPress 网站做了个微信小程序版本。这篇文章主要记录自己在开发第一版的过程,顺便为有兴趣的你剖析如何将一个WordP...

    Jeff
  • Hive2.0.0操作HBase 1.2.1报错解决

    首先看错  org.apache.hive.service.cli.HiveSQLException: Failed to open new session: ...

    汤高
  • 设置SSL后如何实现https自动跳转

    IIS6.0路径:C:\WINDOWS\Help\iisHelp\common\403-4.htm

    德顺
  • python找到多个字典中的公共键

    python找到多个字典中的公共键 生成字典 from random import randint,sample s = 'abcdefg' s1 = {...

    听城

扫码关注云+社区

领取腾讯云代金券