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