暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

静态数据字典视图的分类

原创 Eygle 2019-07-24
581

静态数据字典视图按照前缀的不同通常被分为三类:

1.USER_ 类视图包含了用户所拥有的相关对象信息,用户可以通过这个视图查询自己拥有的对象信息。

2.ALL_ 类视图包含了用户有权限访问的所有对象的信息。

3.DBA_ 类视图包含了数据库所有相关对象的信息,用户需要SELECT ANY TABLE权限才能访问。

这三者的关系大致可以用如下示意图描述:

 

通过三类视图在本质上是为了实现权限的控制。在Oracle数据库中,每个用户与方案(Schema)是对应的,Schema是用户所拥有的对象的集合。数据库通过Schema将不同用户的对象隔离开来,用户可以自由访问自己Schema的对象,但是对于其他Schema对象的访问则需要获得授权。

以下通过常用的字典视图做一个简单的示范说明。

USER_TABLES视图是USER类视图的一个典型代表。这个视图中记录了当前用户所拥有的所有表的信息:

SQL> connect eygle/eygle
Connected.
SQL> select table_name,tablespace_name from user_tables;  
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
CUSTOM                         USERS

而对于ALL_TABLES视图,不仅包含用户所拥有的表,还包括用户有权限能够访问的表,这些表可能来自其他用户的授权:

SQL> connect gqgai/eygle
Connected.
SQL> grant select on sales to eygle;
Grant succeeded.

获得授权之后,用户就能够通过ALL_TABLES视图获得这些表的信息:

SQL> select table_name,owner from all_tables where owner in ('EYGLE','GQGAI');
TABLE_NAME                     OWNER
------------------------------ ------------------------------
CUSTOM                         EYGLE
SALES                          GQGAI

而DBA_TABLES则是一个超级集合,包含了数据库所有的表对象,查询这个视图需要DBA的权限或者SELECT ANY TABLE的系统权限。通过以下查询可以简要统计不同用户拥有的表对象数量:

SQL>  select owner,count(*) from dba_tables group by owner order by 2;
OWNER                            COUNT(*)
------------------------------ ----------
EYGLE                                   1
GQGAI                                   1
……………………
SYSTEM                                150
SYS                                   837
23 rows selected.


最后修改时间:2019-07-24 10:42:27
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论