设为首页 收藏本站
查看: 1149|回复: 0

[经验分享] Oracle之数据字典

[复制链接]

尚未签到

发表于 2018-9-7 12:12:20 | 显示全部楼层 |阅读模式
  数据字典
  数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息
  数据字典记录了数据库的系统信息,它是只读表和视图的集合,数据字典的所有者是sys用户
  用户只能在数据字典上执行查询操作,而其维护和修改是由系统自动完成的
  数据字典包括数据字典基表和数据字典视图,其中基表存储数据库的基本信息,普通用户不能直接访问数据字典的基表,数据字典视图是基于数据字典基表所建立的视图,普通用户可以通过查询数据字典视图取得系统信息
  数据字典视图主要包括:user_xxx,all_xxx,dba_xxx三种类型
  动态性能视图挤在了例程启动后的相关信息(经常变化的信息)
  数据字典由数据基表和动态视图组成
  数据字典基表存放的是静态数据
  数据字典动态视图存放的是动态信息
  数据字典记录有oracle数据库的所有系统信息,通过查询数据字典可以取得
  一下系统信息,比如:
  1、对象定义情况
  2、对象占用空间大小
  3、列信息
  4、约束信息
  动态性能视图
  动态性能视图用于记录当前例程的活动信息,当启动oracle server时,系统
  会建立动态性能视图;当停止oracle server时,系统会删除动态性能视图。oracle
  的所有动态性能视图都是以v_$开始的,并且oracle为每个动态性能视图都提供了相应的同义词
  并且同义词是以V$开始的,例如v_$datafile的同义词为v$datafile;
  动态性能视图的所有者为sys,一般情况下,由dba或是特权用户来查询动态性能视图
  user_tables:用于显示当前用户所拥有的所有表,它只返回用户所对应方案的所有表
  SQL> desc user_tables;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  TABLE_NAME                                NOT NULL VARCHAR2(30)
  TABLESPACE_NAME                                    VARCHAR2(30)
  CLUSTER_NAME                                       VARCHAR2(30)
  IOT_NAME                                           VARCHAR2(30)
  STATUS                                             VARCHAR2(8)
  用于显示当前方案的所有表信息
  SQL> select table_name from user_tables;
  TABLE_NAME
  ------------------------------
  DEPT
  EMP
  BONUS
  SALGRADE
  STUDENT
  all_tables:用于显示当前用户可以访问的所有表,它不仅会返回当前用户方案的所有表
  还会返回当前用户可以访问的其他方案的表
  例:某个用户授权某张表给指定用户可以查询等操作
  SQL> select table_name from all_all_tables;
  dba_tables
  它会显示所有方案拥有的数据库表,但是查询这种数据库字典视图,要求用户必须是dba角色
  或是有select any table系统权限
  例如:当用system用户查询数据库字典视图dba_tables时,会返回system、sys,scott。。。
  方案所对应的数据库表
  使用system用户
  select table_name from dba_tables;
  MYEMP
  TEST
  WRI$_ADV_OBJSPACE_TREND_DATA
  MYTABLE
  2729 rows selected
  用户名,权限,角色
  在建立用户时,oracle会把用户的信息存放到数据字典中,当给用户授予权限或是角色时
  oracle会将权限和角色的信息存放到数据字典中
  通过查询dba_users可以显示所有数据库用户的详细信息   --使用的system查询
  SQL> desc dba_users;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  USERNAME                                  NOT NULL VARCHAR2(30)
  USER_ID                                   NOT NULL NUMBER
  PASSWORD                                           VARCHAR2(30)
  ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
  LOCK_DATE                                          DATE
  EXPIRY_DATE                                        DATE
  DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
  TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
  CREATED                                   NOT NULL DATE
  PROFILE                                   NOT NULL VARCHAR2(30)
  INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
  EXTERNAL_NAME                                      VARCHAR2(4000)
  PASSWORD_VERSIONS                                  VARCHAR2(8)
  EDITIONS_ENABLED                                   VARCHAR2(1)
  AUTHENTICATION_TYPE                                VARCHAR2(8)
  有字段是username,即数据库用户名,于是可以查出数据库有多少用户
  SQL> select username from dba_users;
  USERNAME
  ------------------------------
  SYS
  SYSTEM
  XIAOBAI
  XIAOMING
  SCOTT
  OUTLN
  MGMT_VIEW
  通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限
  SQL> desc dba_sys_privs;    系统权限表
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  GRANTEE                                   NOT NULL VARCHAR2(30)
  PRIVILEGE                                 NOT NULL VARCHAR2(40)
  ADMIN_OPTION                                       VARCHAR2(3)
  SQL> select * from dba_sys_privs where grantee='SCOTT';
  GRANTEE                        PRIVILEGE                                ADM
  ------------------------------ ---------------------------------------- ---
  SCOTT                          UNLIMITED TABLESPACE                     NO
  可以查询到每个用户所拥有的系统权限,以及他是否配置了with admin option
  SQL> select * from dba_sys_privs where grantee='SYSTEM';
  GRANTEE                        PRIVILEGE                                ADM
  ------------------------------ ---------------------------------------- ---
  SYSTEM                         GLOBAL QUERY REWRITE                     NO
  SYSTEM                         CREATE MATERIALIZED VIEW                 NO
  SYSTEM                         CREATE TABLE                             NO
  SYSTEM                         UNLIMITED TABLESPACE                     YES
  SYSTEM                         SELECT ANY TABLE                         NO
  通过查询数据字典视图dba_tab_privs,可以显示用户具有的对象权限
  SQL> desc dba_tab_privs;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  GRANTEE                                   NOT NULL VARCHAR2(30)
  OWNER                                     NOT NULL VARCHAR2(30)
  TABLE_NAME                                NOT NULL VARCHAR2(30)
  GRANTOR                                   NOT NULL VARCHAR2(30)
  PRIVILEGE                                 NOT NULL VARCHAR2(40)
  GRANTABLE                                          VARCHAR2(3)
  HIERARCHY                                          VARCHAR2(3)
  通过查询数据字典dba_col_privs,可以显示用户具有的列权限
  SQL> desc dba_col_privs;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  GRANTEE                                   NOT NULL VARCHAR2(30)
  OWNER                                     NOT NULL VARCHAR2(30)
  TABLE_NAME                                NOT NULL VARCHAR2(30)
  COLUMN_NAME                               NOT NULL VARCHAR2(30)
  GRANTOR                                   NOT NULL VARCHAR2(30)
  PRIVILEGE                                 NOT NULL VARCHAR2(40)
  GRANTABLE                                          VARCHAR2(3)
  通过查询数据库字典视图dba_role_privs,可以显示用户所具有的角色        ------》如何查看某个用户,具有什么样的角色?
  SQL> desc  dba_role_privs;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  GRANTEE                                            VARCHAR2(30)
  GRANTED_ROLE                              NOT NULL VARCHAR2(30)
  ADMIN_OPTION                                       VARCHAR2(3)
  DEFAULT_ROLE                                       VARCHAR2(3)
  查询Scott用户具有的角色?
  SQL> select granted_role from dba_role_privs where grantee='SCOTT';
  GRANTED_ROLE
  ------------------------------
  RESOURCE
  CONNECT      唯独的两个角色
  用户system具有的角色
  SQL> select granted_role from dba_role_privs where grantee='SYSTEM';
  GRANTED_ROLE
  ------------------------------
  AQ_ADMINISTRATOR_ROLE
  MGMT_USER
  DBA
  1、如何查询一个角色所包含的权限?
  一个角色包含的系统权限   系统权限表为dba_sys_privs
  SQL> desc dba_sys_privs;
  Name         Type         Nullable Default Comments
  ------------ ------------ -------- ------- ----------------------------------------------
  GRANTEE      VARCHAR2(30)                  Grantee Name, User or Role receiving the grant
  grantee:值为user或者role
  查询角色connect的系统权限?
  SQL> select * from dba_sys_privs where grantee='CONNECT';
  GRANTEE                        PRIVILEGE                                ADM
  ------------------------------ ---------------------------------------- ---
  CONNECT                        CREATE SESSION                           NO
  于是系统权限create session就是能够登陆数据库的权限,也就是connect角色
  还有一张表:role_sys_privs角色系统权限表
  SQL> desc role_sys_privs;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  ROLE                                      NOT NULL VARCHAR2(30)
  PRIVILEGE                                 NOT NULL VARCHAR2(40)
  ADMIN_OPTION                                       VARCHAR2(3)
  一个角色包含的对象权限  对象权限表为:dba_tab_privs
  SQL> desc dba_tab_privs;     系统对象权限表
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  GRANTEE                                   NOT NULL VARCHAR2(30)
  OWNER                                     NOT NULL VARCHAR2(30)
  TABLE_NAME                                NOT NULL VARCHAR2(30)
  GRANTOR                                   NOT NULL VARCHAR2(30)
  PRIVILEGE                                 NOT NULL VARCHAR2(40)
  GRANTABLE                                          VARCHAR2(3)
  HIERARCHY                                          VARCHAR2(3)
  SQL> select privilege from dba_tab_privs where grantee='CONNECT';
  no rows selected
  一个角色包含的权限来自于系统权限和对象权限
  2、oracle究竟有多少种角色?   查询表dba_roles
  SQL> desc dba_roles;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  ROLE                                      NOT NULL VARCHAR2(30)
  PASSWORD_REQUIRED                                  VARCHAR2(8)
  AUTHENTICATION_TYPE                                VARCHAR2(11)
  SQL> select count(*) from dba_roles;
  COUNT(*)
  ----------
  55
  SQL> select role from dba_roles;
  ROLE
  ------------------------------
  CONNECT
  RESOURCE
  DBA
  SELECT_CATALOG_ROLE
  EXECUTE_CATALOG_ROLE
  DELETE_CATALOG_ROLE
  EXP_FULL_DATABASE
  IMP_FULL_DATABASE
  LOGSTDBY_ADMINISTRATOR
  DBFS_ROLE
  AQ_ADMINISTRATOR_ROLE
  一共有55种角色
  3、查询oracle中所有的系统权限?
  select * from system_privilege_map order by name;
  SQL> desc system_privilege_map;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  PRIVILEGE                                 NOT NULL NUMBER
  NAME                                      NOT NULL VARCHAR2(40)
  PROPERTY                                  NOT NULL NUMBER
  SQL> select count(*) from system_privilege_map;
  COUNT(*)
  ----------
  208
  4、查询oracle中所有对象权限?
  select distinct privilege from dba_tab_privs;
  5、查询数据库的表空间?  查询表系统表空间dba_tablespaces
  SQL> desc dba_tablespaces;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  TABLESPACE_NAME                           NOT NULL VARCHAR2(30)
  BLOCK_SIZE                                NOT NULL NUMBER
  INITIAL_EXTENT                                     NUMBER
  NEXT_EXTENT                                        NUMBER
  MIN_EXTENTS                               NOT NULL NUMBER
  MAX_EXTENTS                                        NUMBER
  MAX_SIZE                                           NUMBER
  PCT_INCREASE                                       NUMBER
  MIN_EXTLEN                                         NUMBER
  STATUS                                             VARCHAR2(9)
  CONTENTS                                           VARCHAR2(9)
  LOGGING                                            VARCHAR2(9)
  FORCE_LOGGING                                      VARCHAR2(3)
  EXTENT_MANAGEMENT                                  VARCHAR2(10)
  ALLOCATION_TYPE                                    VARCHAR2(9)
  PLUGGED_IN                                         VARCHAR2(3)
  SEGMENT_SPACE_MANAGEMENT                           VARCHAR2(6)
  DEF_TAB_COMPRESSION                                VARCHAR2(8)
  RETENTION                                          VARCHAR2(11)
  BIGFILE                                            VARCHAR2(3)
  PREDICATE_EVALUATION                               VARCHAR2(7)
  ENCRYPTED                                          VARCHAR2(3)
  COMPRESS_FOR                                       VARCHAR2(12)
  SQL> select tablespace_name from dba_tablespaces;
  TABLESPACE_NAME
  ------------------------------
  SYSTEM
  SYSAUX
  UNDOTBS1
  TEMP
  USERS
  显示当前数据库的全称
  select * from global_name;
  SQL> select * from global_name;
  GLOBAL_NAME
  --------------------------------------------------------------------------------
  ORCL11G.US.ORACLE.COM
  显示当前用户可以访问的所有数据字典视图
  select * from dict where comments like '%grant%';
  SQL> desc dict;
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
  TABLE_NAME                                         VARCHAR2(30)
  COMMENTS                                           VARCHAR2(4000)
  SQL> select * from dict where comments like '%grant%';
  TABLE_NAME                     COMMENTS
  ------------------------------ --------------------------------------------------------------------------------

  USER_AUDIT_STATEMENT           Audit trail records concerning  grant, revoke, audit, noaudit and>  USER_COL_PRIVS


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-566051-1-1.html 上篇帖子: Oracle之管理以及exp、imp的使用 下篇帖子: 如何区分Oracle的数据库,实例,服务名,SID
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表