数据库的体系结构是指数据库的组成、工做过程、以及数据库中数据的组织与管理机制,要了解Oracle数据库的体系结构,必须理解Oracle系统的主要组件和重要概念。算法
Oracle体系结构包含一系列组件,以下图所示,图中显示了Oracle体系结构中的主要组件,包括实例、用户进程、服务器进程、数据文件及其余文件,如参数文件、口令文件和归档日志文件等。从图中能够看出,实例和数据库是Oracle数据库体系结构的核心组成部分,也是最重要的两个概念;DBA一个很重要的工做就是维护实例和数据库自己的正常工做。sql
Oracle实例是后台进程和内存结构的集合,必须启动实例才能访问数据库中的数据。Oracle实例启动时,将分配一个系统全局区(SGA)并启动一系列Oracle后台进程。Oracle实例有两种类型:单进程实例和多进程实例,单进程Oracle实例使用一个进程执行Oracle的所有操做,在单进程环境下的Oracle实例仅容许一个用户可存取;多进程Oracle实例(又称多用户Oracle)使用多个进程来执行Oracle的不一样部分,对于每一个链接的用户都有一个进程。数据库
数据库是数据的集合,物理上指存储数据库信息的一组操做系统文件,每一个数据库有一个逻辑结构和物理结构。物理结构是指构成数据库的一组操做系统文件,主要由三种类型文件组成:数据文件、控制文件和重作日志文件。数据库的逻辑结构是指数据库数据的逻辑存储结构(如表空间、段)和模式对象(如表、视图等)。vim
从Oracle 12c版本开始,Oracle引入了可插拔数据库的概念,可插拔是为云计算而生。可插拔的结构由一个容器数据库(CDB)和若干个可组装数据库(PDB)组成,每一个PDB对外可充当一个独立的数据库工应用程序使用,它能够包含本身的数据文件,可是全部的PDB共享CDB的控制文件以及日志文件。所谓的可插拔,意味着PDB能够像USB同样随时插入CDB中,不用了也能够随时拔下来。一个CDB中最多能够插入250个PDB,在PDB中,seedPDB为模板PDB,它为新建立的PDB提供模板,其余的PDB能够根据须要建立、删除。可插拔功能能够加速数据库的部署,给一个CDB打补丁就能够经全部的更新同步到其上的全部PDB中。c#
在Oracle 12c以前的版本中,实例和数据库只能是一对一或多对一(RAC,Real Application Clusters,实时应用集群)的关系,即只能是一个实例对应一个数据库,或者多个实例对应一个数据库。但在Oracle 12c版本中,经过引入CDB和PDB,一个实例能够对应多个可插拔数据库。缓存
可插拔数据库的使用场景:安全
企业中有多个应用均须要使用Oracle数据库,他们仅使用很是少许的硬件资源,可是又不得不为他们建立多个实例;bash
一些不是特别重要的数据库,打包须要DBA花费大量的精力去维护;服务器
- 为了更好的利用硬件资源以及减小管理开销,有必要将大量的部门级应用整合到少数几个Oracle关系型数据库中,以便部署和管理;
经过在一个集中化的平台部署多个数据库,同时又共享一个数据库实例,能够大大下降成本,即更少的实例损耗和耕地的存储技术。session
若是在生产环境中只须要一个数据库,并不想使用可插拔数据库,能够在安装过程当中取消勾选“建立为容器数据库”复选框,从而将安装一个普通数据库。
Oracle服务器它主要由实力和数据库文件组成,也就是常说的数据库管理系统(Database Management System,DBMS)。Oracle服务器的组成以下图:
Oracle服务器除了维护实例和数据库文件外,还在用户创建与服务器的链接时启动服务器进程并分配PGA.(Program Area,程序全全局区)。
Oracle的存储结构分为物理结构和逻辑结构,这两种存储结构既相互独立又相互联系。以下图所示:
物理结构主要描述Oracle数据库的外部存储结构,即在操做系统中如何组织、管理数据。
物理结构是Oracle数据库建立后使用的操做系统物理文件,Oracle数据库的物理文件分为如下两类:
①数据文件:数据文件(Data File)的扩展名一般是.dbf,是物理存储Oracle数据库数据的文件。
数据文件的特色:
每一个数据文件只与一个数据库相联系;
一个表空间可包含一个或多个数据文件;
- 一个数据文件只能属于一个表空间;
②重作日志文件:重作日志文件(Redo Log File)的扩展名是.log,它记录了对数据的全部更改信息,并提供了一种数据恢复机制,确保在系统崩溃或其余意外出现后从新恢复数据库。
在Oracle数据库中,重作日志文件是成组使用的,每一个重作日志文件组能够有一个或多个重作日志文件。在工做过程当中,多个重作日志文件组之间循环使用,当一个重作日志文件组写满后,会转向下一个日志文件组。重作日志文件用于记录数据库变化,是用户的事务处理日志。
③控制文件:控制文件(Control File)的扩展名是.ctl,是一个二进制文件。控制文件中存储的信息不少,其中包括数据文件和重作日志文件的名称和位置。控制文件是数据库启动及运行所必须的文件。当Oracle读写数据时,要根据控制文件 的信息查找数据文件。
因为控制文件的重要性,一个数据库至少要有两份控制文件。Oracle 12c默认包含两个控制文件,各个控制文件内容相同,从而能够避免由于一个控制文件的损坏而致使没法启动数据库的状况出现。
控制文件中记录了如下关键信息:
数据文件的位置及大小;
重作日志文件的位置及大小;
数据库名称及建立时间;
- 日志序列号;
其余文件有参数文件、归档日志文件、口令文件等。
数据库的逻辑结构是从逻辑的角度分析数据库的组成的。Oracle数据库的逻辑结构包括表空间、段、区、块和模式等。如图:
每一个Oracle数据库都是由若干个表空间构成的,用户在数据库中创建的全部内容都被存储到表空间中。一个表空间能够由多个数据文件,但一个数据文件只能属于一个表空间。与数据文件这种物理结构不一样,表空间属于数据库的逻辑结构。
在每一个数据库中,都有一个名为“SYSTEM”的表空间,即系统表空间,还会有SYSAUX、UNDO、USERS等表空间,这些都是在建立数据库时自动建立的。管理员能够建立自定义的表空间并分配给指定用户,也能够为表空间增长和删除数据文件。
表空间基本有如下三类:
①永久性表空间:通常保持基表、试图、过程和索引等的数据。SYSTEM、SYSAUX、USERS表空间是默认安装的;
②临时性表空间:只用于保存系统中短时间活动的数据,如排序数据等;
- ③撤销表空间:用来帮助回退未提交的事务数据,已提交的数据在这里是不能够恢复的;
通常不须要建立临时性表空间和撤销表空间,除非要把他们转移到其余磁盘中以提升性能。
表空间的目的以下:
①对不一样用户分配不一样的表空间,对不一样的模式对象分配不一样的表空间,方便对用户操做和对模式对象的管理;
- ②能够将不一样数据文件建立不一样的磁盘中,有利于管理磁盘空间、提升I/O性能、备份和恢复数据等;
通常在完成Oracle系统的安装并建立Oracle实例后,Oracle系统自动创建SYSTEM、SYSAUX、USRS等多个表空间。
下面详细介绍一下SYSTEM表空间、SYSAUX表空间、TEMP表空间和TEMP表空间:
SYSTEM表空间:用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。不建议将用户建立的表,索引等对象存放到SYSTEM表空间中。
SYSAUX表空间:做为SYSTEM的辅助表空间,用于存放各类数据库工具用户的数据;还用于存放各类模式的对象数据,如智能代理用户DBSNMP等,这些模式在数据库安装完成后就创建了相应的对象并都存放在SYSAUX表空间中。
USERS表空间:一般做为用户使用的表空间,能够在这个表空间上建立各类对象,如表、索引等。
除了Oracle系统默认建立的表空间外,用户可根据应用系统的模式及其所要存储的对象类型建立多个表空间,以区分用户数据和系统数据。
建立表空间数据数据定义语言,语法以下:
SQL> create tablespace benet datafile'/u01/app/oracle/oradata/benet.DBF' size 10M autoextend on;
在语法中:
tablespacename是表空间名称。
DATAFILE指定组成表空间的一个或多个数据文件,当有多个数据文件时使用逗号进行分隔。
filename是表空间中数据文件的路径和名称。
SIZE指定文件的大小,用K指定千字节大小,用M指定兆字节大小。
- AUTOEXTEND子句用来启动或禁用数据文件的自动扩展。若设置AUTOEXTEND参数为ON,则空间用尽会自动扩展;当设置AUTOEXTEND参数为OFF时很容易出现表空间剩余容量为0,形成数据不能存储到数据库中的状况出现。
建立完表空间以后,能够对表空间进行相应的管理,主要包括如下几种操做。
调整表空间大小,当遇到数据插入失败,表空间已满的状况,能够经过ALTER语句来调整表空间的大小,此时有两种调整表空间大小的方式。
方法一:更改数据文件的大小,并指明数据文件的存放路径,其中还使用了RESIZE关键字,用于指定调整后的数据文件的大小,代码以下:
SQL> alter database datafile'/u01/app/oracle/oradata/benet.DBF' resize 50M; Database altered.
方法二:向表空间内添加数据文件。为表空间添加一个新的数据文件的代码以下:
SQL> alter tablespace benet add datafile '/u01/app/oracle/oradata/benet01.DBF' size 20M autoextend no; Tablespace altered.
改变表空间的读写状态。当数据是历史数据,只容许查询,不但愿被修改使,能够将表空间设置为只读状态。READ ONLY表示该表空间为只读状态,READ WRITE表示该表空间为可读写状态。具体语法格式以下:
SQL> alter tablespace benet read only; <!--修改表空间为只读--> Tablespace altered. SQL> alter tablespace benet read write; <!--修改表空间为可读写文件--> Tablespace altered.
删除表空间。能够经过DROP语句来删除表空间,只须要再加上表空间的名称便可。具体语法格式以下:
SQL> drop tablespace benet including contents; Tablespace dropped.
段(Segment)存在于表空间中,是一种指定类型的逻辑存储结构,段由一组区组成。段可分红四类:数据段、索引段、回退段、临时段。例如,对于每一个非汇集表有一个数据段,表的全部数据存储再该段;而对于每一个索引都有一个索引段。
区(Extent)是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区由连续的数据块组成。段主要由一个或者多个区构成,当段建立后,它至少包含一个区。当段中的全部空间都彻底使用时,系统将自动为该段分配一个新区。区不能跨数据文件存在,只能存在于一个数据文件中。
数据块(Data Block)是数据库中最小的数据组织单位于管理单位。Oracle数据库中的数据存储于数据块中。数据块是Oracle服务器所能读取或写入的最小存储单元。Oracle服务器以数据块为单位管理数据文件的存储空间。数据块的取值范围为2~64KB,其默认大小与Oracle版本有关。
模式(Schema)是数据库对象(又称模式对象)的集合。模式对象包括表、视图、索引、同义词、序列、过程和程序包等。每建立一个用户,Oracle会自动建立一个与用户名相同的模式,所以,模式又称用户模式。用户登陆后,默认访问的是与本身的名称相同的模式中的数据库对象。
内存结构是Oracle数据库体系中最为重要的一部分,内存也是影响数据库性能的第一要素。
Oacle内存存储的主要内容:
程序代码;
已经链接的会话的相关信息,包括当前全部活动会话和非活动会话;
程序运行时必需的相关信息,如查询计划;
- Oracle进程之间通讯和共享的信息,如锁;
按照内存使用方式不一样,Oracle数据库的内存也能够分为SGA、PGA、和UGA(User Global Area,用户全局区)。
SGA:全部用户均可以访问的实例的共享内存区域。数据块、事务处理日志、数据字典信息等都存储在SGA中。
UGA:为用户进程存储会话状态的内存区域。根据用户数据库时配置为专用服务器模式,仍是配置为共享服务器模式,UGA能够做为SGA或PGA的一部分。它为用户会话存储数据。接下来重点介绍一下SGA和PGA:
Oracle实例的SGA同来存储数据库信息,并由多个数据库进程共享。当数据库实例启动时,SGA的内存被自动分配。SAG是数据库中占用服务器内存最大的一个区域,也是影响数据库性能的一个重要指标。SGA按其做用不一样,可分为共享池、数据缓冲区、重作日志缓冲区、大池和Java池等。
共享池是对SQL、PL/SQL程序进行语法分析、编译、执行时用到的内存区域。共享池由库缓存和数据字典缓存组成。
库缓存含有最近执行的SQL、PL/SQL语句的分析码和执行计划。
数据缓冲区用于存储从磁盘数据文件中读入的数据,供全部用户共享。修改数据时,首先要从数据文件中取出数据,存储于数据缓冲区中。修改的数据,插入的数据都被存储于数据缓冲区中,修改完成和其余条件知足时,数据才被写入数据文件中。
Oracle服务器进程在处理一个查询时,首先查找内存中是否存在所需的数据块。若是在数据缓冲区中没有找到须要的块,服务器进程就从数据文件中读取此块,并保存在缓冲区中。当后续的请求须要读取这些块时,即可以在内存中找到,所以这些请求不须要从磁盘中读取,从而提升了读取速度。数据缓冲区的大小对数据库的读取速度有直接的影响。
当用户执行了如INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等操做时,数据发生了变化,这些变化了的数据在写入数据缓存以前先要写入重作日志缓冲区,同时变化以前的数据也放入重作日志缓存,这样在数据恢复时Oracle就知道哪些资源须要提交,哪些资源须要撤回。相对于数据缓冲区,日志缓冲区对数据库的性能影响较小。
在SGA中,大池是一个可选的缓冲区,管理员能够根据须要对其今进行配置。在大规模输入、输出及备份过程当中也须要大池做为缓冲空间,如大数据操做、数据库备份与恢复之类的操做。
在SGA中,Java池也是一个可选的缓冲区,可是在安装Java或者使用Java程序时必须设置Java池,用于编译Java语言编写的指令。
PGA不是实例的一部分,它包含单个服务器进程或单个后台进程所需的数据和控制信息。PGA是在用户进程链接到数据库并建立一个会话时自动分配的,该分区保留了每一个与Oracle数据库链接的用户进程所需的内存。在一个用户结束会话后,PGA将被释放。
Oracle中有几种不一样类型的进程:用户进程、服务器进程和后台进程。
用户进程:在数据库用户请求链接Oracle服务器时启动;
服务器进程:在用户创建会话并链接Oracle实例时启动;
- 后台进程:在Oracle实例启动时启动;
用户进程是一个须要与Oracle服务器进程交互的程序。当数据库用户运行一个应用程序准备向数据库服务器发送请求时,即建立了用户进程。例如:用户启动数据库工具Sqlplus时,系统将自动创建一个用户进程。
在Oracle数据库中,为了使系统性能更好地协调多个用户,实例系统中使用的一些附加进程,称为后台进程。这些后台进程存在于操做系统中,在实例启动时自动启动。其中有五个进程是必需要启动的,不然数据库实例没法启动。这五个重要且必需的后台进程为进程监控(Process Monitor,PMON)进程、系统监控(System Monitor,SMON)进程、数据写入(Database Writer,DBWR)进程、日志写入(Log Writer,LGWR)进程、检查点(Check Point,CKPT)进程。
PMON进程在用户链接意外中断后执行资源清理工做,包括如下任务:
释放全部当前挂起的锁;
回滚用户当前事务处理;
释放用户当前使用的资源;
- 监控服务器进程和其余后台进程,出现故障时重启它们;
SMON进程执行如下任务:
- 在实例启动时执行实例恢复。实例恢复包括三个步骤:
①前滚以恢复未写入的数据文件但已记入联机日志文件的数据;
②打开数据库,以便用户能登陆并访问数据;
③回滚为提交的事务处理;
整理数据文件的自由空间;
- 释放再也不使用的临时段;
DBWR进程执行如下任务:
管理数据缓冲区,以便能找到空闲的缓冲区读入数据文件的数据;
将全部修改后的缓冲区数据写入数据文件;
使用LRU算法经最近使用过的块保留在内存中;
- 经过延迟写入优化磁盘I/O读写;
LGWR进程负责将重作日志缓冲区中的日志数据写入日志文件组。数据库在运行时,若是对数据进行修改,则产生日志信息,日志信息首先产生于重作日志缓冲区中。此缓冲器按照“先进先出”的原则进行操做,当日志信息知足必定条件是,由LGWR进程将日志数据写入日志文件。系统一般有多个日志文件,日志写入进程以循环的方式将数据写入文件。
CKPT进程是确保数据缓冲区中全部修改过的数据块都写入数据文件的机制。当检查点完成后,CKPT进程负责更新数据文件头和控制文件、保存检查点信息,以保证数据库日志文件和数据文件同步。在数据库恢复时只须要找到CKPT保存的最后一次检查点,就能够根据它肯定日志文件中恢复数据的开始位置,而后从新执行其以后的日志记录便可。
ARCn进程即归档日志进程,是一个可选进程,只有在打开日志归档时才有该进程。该进程的主要做用是发生日志切换时将写满的联机日志文件复制到归档目录。
和以前版本的Oracle不一样,Oracle 12c能够做为单个数据库使用(经过再安装时取消勾选“建立为容器数据库”复选框),也可根据企业须要,提供若干个可插拔PDB数据库。每一个PDB能够由不一样的DBA维护。下面介绍CDB和PDB的基本维护。
[oracle@oracle ~]$ source .bash_profile [oracle@oracle ~]$ sqlplus / as sysdba <!--以sys用户登陆数据库--> SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 7 14:58:04 2020 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> startup; <!--启动数据库--> ORACLE instance started. Total System Global Area 1660944384 bytes Fixed Size 8793448 bytes Variable Size 1056965272 bytes Database Buffers 587202560 bytes Redo Buffers 7983104 bytes Database mounted. Database opened. SQL> SQL> show con_name; <!--查看当前所在的容器--> CON_NAME ------------------------------ CDB$ROOT <!--CDB$ROOT表明当前在CDB下面--> SQL> SQL> show pdbs; <!--查看数据库的全部容器--> CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB MOUNTED <!--状态为mounted(并无open)--> SQL> SQL> alter pluggable database orclpdb open; <!--CDB下修改可插拔数据库orclpdb为打开状态--> Pluggable database altered. SQL> SQL> alter session set container=orclpdb; <!--CDB下切换会话到PDB(orclpdb)中--> Session altered. SQL> SQL> show con_name; <!--再次查看当前位置已经位于orclpdb中--> CON_NAME ------------------------------ ORCLPDB SQL>
从CDB切换到PDB以及相关的操做以下:
SQL> show con_name; <!--查看当前位置--> CON_NAME ------------------------------ CDB$ROOT SQL> SQL> alter session set container=orclpdb; <!--切换会话到PDB中--> Session altered. SQL> SQL> show con_name; <!--查询当前容器--> CON_NAME ------------------------------ ORCLPDB SQL> SQL> shutdown immediate; <!--在PDB中关闭可插拔数据库--> Pluggable Database closed. SQL> SQL> startup; <!--在PDB中打开可插拔数据库--> Pluggable Database opened. SQL> SQL> alter session set container=cdb$root; <!--切换会话到CDB中--> Session altered. SQL> SQL> show con_name; <!--再次查看当前的位置--> CON_NAME ------------------------------ CDB$ROOT SQL>
经过上面的操做能够发现,能够在CDB中管理PDB,如CDB中经过命令“alter pluggable database orclpdb open”能够将PDB数据设置为打开状态。固然也能够在PDB中维护,如执行“shutdown immediate”命令和“startup”命令分别关闭和打开PDB数据库。在CDB和PDB中切换也是很是方便的,只需执行“alter session set container=xxx”命令便可。
链接到可插拔数据PDB有两种方法,一种是执行命令“sqlplus / as sysdba”进入CDB,而后经过“alter session set container=xxx”命令切换到PDB;另外一种方法是执行“sqlplus sys/oracle@orclpdb sa sysdba”命令直接进入PDB数据库,其中orclpdb是pdb容器的名称,并且还要在/u01/app/oracle/product/12.2.0/dbhome_1/network/admin/tnsnames.ora文件中增长如下内容:
[oracle@oracle ~]$ vim /u01/app/oracle/product/12.2.0/dbhome_1/ network/admin/tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521)) # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521)) ORCL = ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ---------------------------------------------------- <!--分界线,以上不须要进行--> ORCLPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Oracle)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb) ) )
在建立一个新数据库时,Oracle将建立一些默认数据库用户,好比:SYS、SYSTEM等用户。SYS和SYSTEM用户都是Oracle的管理用户。若是在安装过程当中选择安装示例数据库,则会自动建立HR用户,HR用户是Oracle数据库的一个示范用户,也能够根据需求导入其余示例数据库。示例数据库里面包含一些测试展现用的示例表。下面简单介绍一下SYS、SYSTEM和自定义用户。
SYS用户是Oracle中的一个超级用户,主要用来维护系统信息和管理实例。数据库中全部数据字典和视图都存储在SYS模式中。数据字典存储了用来管理数据库对象的全部信息,是Oracle数据库中很是重要的系统信息。SYS用户只能以SYSOPER或SYSDBA角色登陆数据库系统。
SYSTEM用户是Oracle中默认的数据库管理员,它拥有DBA权限。该用户模式中存储了Oracle管理工具使用的内部表和视图。一般经过SYSTEM用户管理Oracle数据库的用户、权限和存储等,不建议在SYSTEM模式中建立用户表。SYSTEM用户不能以SYSOPER或SYSDBA角色登陆系统,只能使用以默认方式(数据库身份验证的方式)登陆。
Oracle 12c支持建立自定义用户,因为PDB的引入,自定义用户范畴和以前版本有所不一样。在CDB模式下,用户分为两种:公用用户和本地用户。公用用户能够在CDB和PDB中使用,而本地用户只能在PDB中使用。在CDB环境中,不容许建立本地用户。Oracle规定,在CDB中建立公用用户时,用户名必须以c##开头。
一般状况下,出于安全考虑,对于不一样用户的数据表须要不一样的访问权限,所以,就须要建立不一样的用户。Oracle中的CREATE USER命令用于建立新用户。每一个用户都有一个默认空间和一个临时表空间。若是没有指定,Oracle就将USERS设为默认表空间,将TEMP设为临时表空间。建立用户的语法以下:
SQL> create user c##tom identified by 123 default tablespace users temporary tablespace temp quota unlimited on users password expire; User created.
SQL> alter user c##tom identified by 123456; User altered.
SQL> drop user c##tom cascade; User dropped.
权限是执行某种类型的SQL语句挥着存取其余用户数据库对象的权力。在Oracle中,权限分为系统权限和对象权限两类。
系统权限是指在数据库中执行某种系统级别的操做,或者针对某一类的对象执行某种操做的权限。例如,在数据库中建立表空间的权力,或者在数据库中建立表的权力,都属于系统权限。系统权限示例以下图:
常见的系统权限以下:
CREATE SESSION:链接到数据库;
CREATE TABLE:建立表;
CREATE VIEW:建立视图;
- CREATE SEQUENCE:建立序列;
一个新用户建立后,首选要授予其CREATE SESSION权限,使其能够登陆到数据库。
对象权限是指针对某个特定的模式对象执行操做的权力。只能针对模式对象来设置和管理对象权限,包括数据库中的表、视图、序列、存储过程等。以下图所示:
Oracle数据库用户有两种获取权限的途径:①直接向用户授予权限;②将权限授予角色,再将角色授予一个或多个用户。使用角色可以更加方便和高效地对权限进行管理。因此数据库管理员经过使用角色向用户授予权限,而不是直接向用户授予权限。在Oracle数据库系统中预约义了不少角色,其中最经常使用的主要有CONNECT角色、RESOURCE角色、DBA角色等。
Oracle中经常使用的系统预约义角色以下:
CONNECT:拥有链接数据库的权限;
RESOURCE:拥有建立表、触发器、过程等权限;
- DBA:数据库管理员角色,拥有管理数据库的最高权限;一个具备DBA角色的用户能够受权任何其余用户甚至其余DBA权限,这是很危险的,所以不要轻易授予该角色;
新建立的用户必须授予必定的权限才能进行相关数据库的操做。受权经过CRANT语句,取消受权则经过REVOKE语句。
SQL> alter session set container=orclpdb; <!--切换到orclpdb数据库--> Session altered. SQL> create user bob identified by 123456; <!--建立帐户bob--> User created. SQL> grant connect,resource to bob; <!--受权bob用户拥有链接数据库和建立表、触发器、过程等权限--> Grant succeeded. SQL> revoke connect,resource from bob; <!--撤销受权--> Revoke succeeded.
数据库用户安全设计原则以下:
数据库用户去哪先按照最小分配原则;
数据库用户可分为管理、应用、维护、备份四类用户;
不容许使用sys和system用户创建数据库应用对象;
禁止对普通用户授予dba权限;
对查询用户只能开放查询权限;
- 对新建用户初次登陆数据库时强制修改密码;
通常程序开发人员只要授予 CONNECT和RESOURCE两个角色便可。特别注意,授予这两个角色就包含了授予用户无限制使用默认表空间的权限。
———————— 本文至此结束,感谢阅读 ————————