0x01 基本概念

0x01.1

Oracle采用了“表空间”的定义。
数据文件就是由多个表空间组成的,这些数据文件和相关文件形成一个完整的数据库。
当数据库创建时,Oracle 会默认创建五个表空间:SYSTEM、SYSAUX、USERS、UNDOTBS、TEMP

  1. SYSTEM:存储系统表和管理配置等基本信息
  2. SYSAUX:主要存放一些系统附加信息,以便减轻 SYSTEM 的空间负担
  3. UNDOTBS:用于事务回退等
  4. TEMP:作为缓存空间减少内存负担
  5. USERS:存储我们定义的表和数据

0x01.2

dual表,该表是Oracle数据库中的一个自带表,这是一个虚拟表,它在实战中就是为了满足查询条件而产生的
你就认为它是oracle的一个语法规定即可

这里提供一个对比的例子

例如查询输出 1+2
MySQL 查询语句可以直接: select 1+2 输出: 3
Oracle中就必须跟一个表名: select 1+2 from dual 输出: 3

注意: 查询 v$开头的表 一般都是DBA用户使用的 需要有DBA权限才能看到这个表, 如果不是DBA用户会提示查找不到该表

0x01.3

权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限。

Oracle 的权限分为系统权限和数据对象权限,共一百多种,如果单独对用户授权,很囧,有一些用户需要的权限是相同的,就把这些用户归为同一类——某种角色,通过设立一些有预定权限的角色简化和明确授权操作,角色出现的动机也就是为了简化权限管理,它是权限的集合。

一般做法是:系统把权限赋给角色,然后把角色赋给用户,当然也可以直接把某权限赋给用户。Oracle 提供细粒度的权限,可以对表的某一列单独设置权限,可以对某用户查询某表自动增添 where 限制条件。

权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级、System 系统级、Role 角色级。

这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户”Public”(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。

对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。权限可以被授予,也可以用同样的方式撤销。

Oracle 的角色存放在表 dba_roles 中,某角色包含的系统权限存放在 dba_sys_privs 中,包含的对象权限存放在 dba_tab_privs 中。

系统权限分类
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE: 拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT: 拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

在创建数据库时,会默认启用 sys、system 等用户

对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, dba权限。

0x02 获取当前数据库用户

  1. SQL> select user from dual;
  2. USER
  3. ------------------------------
  4. SYSTEM

0x03 获取全局数据库名

  1. SQL> SELECT global_name FROM global_name;
  2. GLOBAL_NAME
  3. --------------------------------------------------------------------------------
  4. ORCL.LOCALDOMAIN

0x04 获取数据库版本信息

  1. SQL> SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';
  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

0x05 获取操作系统版本信息

  1. SQL> SELECT banner FROM v$version where banner like 'TNS%';
  2. BANNER
  3. --------------------------------------------------------------------------------
  4. TNS for 64-bit Windows: Version 11.2.0.1.0 - Production

0x06 获取当前数据库

  1. SQL> SELECT name FROM v$database;
  2. NAME
  3. ---------
  4. ORCL

0x07 获取所有数据库用户

  1. SQL> SELECT username FROM all_users;

0x08 获取所有数据库用户 - 需要高权限

  1. SQL> SELECT name FROM sys.user$;

0x09 获取当前用户权限

  1. SQL> SELECT * FROM session_privs;

0x10 获取当前用户名

  1. SQL> SELECT SYS_CONTEXT('USERENV''SESSION_USER') from dual;
  2. SYS_CONTEXT('USERENV''SESSION_USER')
  3. --------------------------------------------------------------------------------
  4. SYSTEM
  1. SQL> SELECT SYS_CONTEXT('USERENV''CURRENT_USER') from dual;
  2. SYS_CONTEXT('USERENV''CURRENT_USER')
  3. --------------------------------------------------------------------------------
  4. SYSTEM

更多可用参数说明可以查阅 Oracle 提供的文档: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions165.htm

0x11 获取当前用户有权限的所有数据库

  1. SELECT DISTINCT owner, table_name FROM all_tables

0x12 查询当前用户有权限的所有表信息

  1. select table_name from user_tables

0x13 查询当前用户有权限的表字段

  1. select * from user_tab_columns
  2. select * from user_tab_cols

0x14 查询出所有的字段

  1. select * from all_tab_columns