Oracle之数据字典
数据字典 数据字典是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 alter system USER_COL_PRIVS (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |