千家信息网

Oracle之数据字典

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,数据字典数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息数据字典记录了数据库的系统信息,它是只读表和视图的集合,数据字典的所有者是sys用户用户只能在数据字典上执行查询操作
千家信息网最后更新 2024年11月23日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


0