我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集👈👈
数据字典&动态性能视图
- 数据字典基表和动态性能视图
- 数据字典
- 这些信息也可以通过PLSQL工具来查询
- 动态性能视图(动态性能表/Dynamic Performance Tables)
数据字典基表和动态性能视图
- 数据字典是帮助用户获取数据库的一些系统级别信息
- 数据字典基表:是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可以获取用户所具有的角色
- 问题
- 如何查询oracle中所有的系统权限
select * from system_privilege_map order by name
- 如何查询oracle中所有的对象权限
select distinct_privilege from dba_tab_privs
- 如何查询oracle有多少种角色
select * from dba_roles
- 如何查询某用户包含多少种角色
select * from dba_role_privs where grantee='用户名';
- 如何查询数据库的表空间
select tablespace_name from dba_tablespaces
- 如何查询一个角色包含的权限
>> 查询一个角色包含的系统权限 方法1:select * from dba_sys_privs where grantee='角色名称' 方法2:select * from role_sys_privs where role='角色名称' 方法3:PLSQL ——> 对象 ——> Roles ——> System privileges >> 查询一个角色包含的对象权限 select * from dba_tab_privs where grantee='角色名称' PLSQL ——> 对象 ——> Roles ——> Object privileges
- 如何查询一个用户包含的权限
>> 查询一个用户的系统权限 select * from dba_sys_privs where grantee='用户名'; >> 查询一个用户的对象权限 select * from dba_tab_privs where grantee='用户名';
- 显示当前用户可以访问的所有数据字典视图
select * from dict where comments like '%grant%'
- 显示当前数据库的全称
select * from global_name
- 如何查询oracle中所有的系统权限
- 在建立用户时,oracle会把用户的信息存放到数据字典中,当给用户授予权限或是角色时,oracle会将权限和角色信息存放到数据字典
-
权限、角色表
表名 备注 dba_tablespaces 表空间名称 system_privilege_map 所有系统权限 dba_role_privs 所有系统/用户包含的角色 dba_tab_privs 所有/角色对象权限 dba_sys_privs 用户/角色系统权限 -
其他说明
-
课外小资料
- 数据字典视图分为三个层面: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 当前用户是否有权力将该权限授予其他用户。