009.数据库管理-数据字典&动态性能视图

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集👈👈

分隔线
在这里插入图片描述

数据字典基表和动态性能视图

  • 数据字典是帮助用户获取数据库的一些系统级别信息
  • 数据字典基表:是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息(静态信息)
  • 动态性能视图:记载了例程启动后的相关信息(动态信息)
  • 在这里插入图片描述

数据字典
  • 数据字典记录了数据库的系统信息,它是只读表和视图的集合,数据字典的所有者为sys用户

  • 用户只能在数据字典上执行查询操作(select语句),而其维护和修改是由系统自动完成的

  • 数据字典的组成

    • 数据字典包括数据字典基表和数据字典视图
    • 数据字典基表:存储数据库的基本信息,普通用户不能直接访问数据字典的基表
    • 数据字典视图:基于数据字典基表所建立的视图,普通用户可以通过查询数据字典视图取得系统信息。数据字典视图主要包括:user_xxx,all_xxx,dba_xxx三种类型
      user_tables:用于显示当前用户所拥有的所有表
          select table_name from user_tables
      
      all_tables:用于显示当前用户可以访问的所有表
          select table_name from all_tables
      
      dba_tables:用于显示所有方案拥有的数据库表。查询该数据库字典视图需要有dba角色或者有select any table系统权限
          select table_name from dba_tables
      
  • 用户名、权限、角色

    • 在建立用户时,oracle会把用户的信息存放到数据字典中,当给用户授予权限或是角色时,oracle会将权限和角色信息存放到数据字典
      • 通过查询dba_users可以获取所有数据库用户的详细信息
      • 通过查询数据字典dba_col_privs可以获取用户具有的列权限
      • 通过查询数据字典视图dba_sys_privs可以获取用户具有的系统权限
      • 通过查询数据字典视图dba_tab_privs可以获取用户具有的对象权限
      • 通过查询数据库字典视图dba_role_privs可以获取用户所具有的角色
    • 问题
      1. 如何查询oracle中所有的系统权限
        select * from system_privilege_map order by name
        
      2. 如何查询oracle中所有的对象权限
        select distinct_privilege from dba_tab_privs 
        
      3. 如何查询oracle有多少种角色
        select * from dba_roles
        
      4. 如何查询某用户包含多少种角色
        select * from dba_role_privs where grantee='用户名';
        
      5. 如何查询数据库的表空间
        select tablespace_name from dba_tablespaces
        
      6. 如何查询一个角色包含的权限
        >> 查询一个角色包含的系统权限
            方法1select * from dba_sys_privs where grantee='角色名称'
            方法2select * from role_sys_privs  where role='角色名称'
            方法3:PLSQL ——> 对象 ——> Roles ——> System privileges
            
        >> 查询一个角色包含的对象权限
            select * from dba_tab_privs where grantee='角色名称'
            PLSQL ——> 对象 ——> Roles ——> Object privileges
        
      7. 如何查询一个用户包含的权限
        >> 查询一个用户的系统权限
            select * from dba_sys_privs where grantee='用户名';
            
        >> 查询一个用户的对象权限
            select * from dba_tab_privs where grantee='用户名';
        
      8. 显示当前用户可以访问的所有数据字典视图
        select * from dict where comments like '%grant%'
        
      9. 显示当前数据库的全称
        select * from global_name
        
  • 权限、角色表

    表名备注
    dba_tablespaces表空间名称
    system_privilege_map所有系统权限
    dba_role_privs所有系统/用户包含的角色
    dba_tab_privs所有/角色对象权限
    dba_sys_privs用户/角色系统权限
  • 在这里插入图片描述

  • 其他说明

    • 数据字典记录有oracle数据库的所有系统信息,通过查询数据字典可以取得一下系统信息
      1. 对象定义情况
      2. 对象占用空间大小
      3. 列信息
      4. 约束信息
    • 这些信息也可以通过PLSQL工具来查询

  • 课外小资料

    • 数据字典视图分为三个层面:DBA视图(所有用户schema内的对象)、ALL视图(用户可访问的对象)、USER视图(用户schema内的对象)。
    • DBA视图:以DBA_开头的视图,包括了整个数据库范围的数据。dba_table表示整个数据库里所有表的信息。用户需要一定的授权才能访问DBA层面的视图。
    • ALL视图:以ALL_开头的视图,包含了当前登录用户有权限看到的数据。all_tables记录了当前登录用户有权限访问的所有表的信息。
    • USER视图:以USER_开头的视图,包含了当前登录用户所拥有的所有表的信息。
    • 三个视图的关系:是DBA包含了ALL包含了USER
  • dictionary视图记录了所有数据字典视图的名称。它的别名是dict。可以通过它来查看数据库中的视图。


动态性能视图(动态性能表/Dynamic Performance Tables)
  • 除了用具体表存放数据字典外,还有一个数据字典,叫做动态性能视图。
  • 用于记录数据库的当前状态,是将内存里的数据或控制文件的数据以表的形式展现出来,是一种虚拟表(virtual table)。
  • 动态性能视图用于记录当前例程的活动信息,当启动oracle server时,系统会建立动态视图,当停止oracle server时,系统会删除动态性能视图。
  • 所有动态性能视图的名称都存放在vKaTeX parse error: Expected group after '_' at position 27: …里。而这些动态性能视图都是以v_̲开头,属主是用户sys。Oracle为每个动态性能视图都创建了同名词,同名词是将中间的“_”去掉了,都是以v$开头。
  • 动态性能表并不是真正的表,大多数用户不应访问其中的信息。但是数据库管理员可以对其进行查询,或在其上创建视图并将访问权限授予其他用户。这些视图有时被称为固定视图(fixed view),因为数据库管理员不能将其修改或移除。

  • a、系统权限部分如下:
    create session          -- 连接数据库
    create tablespace       -- 创建表空间
    alter tablespace        -- 修改表空间
    drop tablespace         -- 删除表空间
    
    create user             -- 创建用户
    drop user               -- 删除用户
    
    create table            -- 创建表
    create any table        -- 在任何用户模式中创建表
    drop any table          -- 删除任何用户模式中的表
    
    alter any table         -- 修改任何用户模式中的表
    select any table        -- 查询任何用户模式中的基本表记录
    insert any table        -- 向任何用户模式中的表插入记录
    update any table        -- 修改任何用户模式中的表
    delete any table        -- 删除任何用户模式中表
    
    create view             -- 创建视图
    create any view         -- 在任何用户模式中创建视图
    drop any view           -- 删除任何用户模式中的视图
    
    create role             -- 创建角色
    alterany role           -- 修改任何角色
    grant any role          -- 将任何角色授予其他用户
    
    alter database          -- 修改数据库结构
    create procedure        -- 创建存储过程
    create any procedure    -- 在任何用户模式中创建存储过程
    alter any procedure     -- 修改任何用户模式中的存储过程
    drop any procedure      -- 删除任何用户模式中的存储过程
    
    create profile          -- 创建配置文件
    alter profile           -- 修改该配置文件
    drop profile            -- 删除配置文件
    
  • b、向用户授予系统权限(使用grant语句)
    grant system_privilege [,...] to {user_name [,...]|role_name [,...]|public} [with admin option];
    
    -- system_privilege     表示系统权限,如create table。中间用逗号分开
    -- user_name            被授予权限的用户,可以是多个用户;
    -- role_name            也可以将系统权限授予某些角色
    -- public               表示Oracle系统所有用户
    -- with admin option    如果指定,则被授予权限的用户可以将该权限再授予其他用户。
    
  • c、查询用户所具有的系统权限
    -- 可以通过视图user_sys_privs来了解。
    -- username         当前用户的用户名
    -- privilege        当前也难怪乎拥有的系统权限
    -- admin_option     当前用户是否有权力将该权限授予其他用户。
    
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值