‘壹’ Oracle大型数据库系统的介绍
本书以AIX UNIX平台为主线,以其他UNIX系统为参照,描述了数据库系统Oracle 10g、Oracle 11g的构架方法,说明了该数据库在AIX平台常用的管理内容,提供了AIX上实施Oracle集群的环境要素和实施方法,分析了服务器综合容灾的工程手段和技术方法,综合了在AIX系统上优化Oracle的诸多做法和要点。最后,本书还以Sybase ASE数据库系统作为对比,论述了Oracle在AIX上的特征。
‘贰’ Oracle数据库是什么
ORACLE是一种适用于大型、中型和微型计算机的关系数据库管理系统,它使用sql(Structured guery language)作为它的数据库语言。
SQL主要包括数据定义、数据操纵(包括查询)和数据控制等三方面功能。SQL是一种非过程化程度很高的语言,用户只需说明"干什么"而无需具体说明"怎么干"语言简洁、使用方便功能强大,集联机交互与嵌入于一体,能适应广泛的使用环境。ORACLE数据库由三种类型的文件组成:数据库文件、日志文件和控制文件。
数据字典是由ORACLE自动建立并更新的一组表,这些表中记录用户的姓名、描述表和视图以及有关用户权限等的信息。数据字典是只读的,只允许查询。也就是说数据字典是一种数据库资源,每个用户都可以访问数据字典,DBA可通过数据字典来监视ORACLERDBMS的使用,并帮助用户完成其应用。ORACLE RDBMS本身也要利用数据库字典来管理和控制整个数据库。
提起数据库,第一个想到的公司,一般都会是Oracle。该公司成立于1977年,最初是一家专门开发数据库的公司。
Oracle在数据库领域一直处于领先地位。1984年,首先将关系数据库转到了桌面计算机上。然后,Oracle的下一个版本,版本5,率先推出了分布式数据库、客户/服务器结构等崭新的概念。Oracle的版本6首创行锁定模式以及对称多处理计算机的支持……最新的Oracle8主要增加了对象技术,成为关系-对象数据库系统。目前,ORACLE产品覆盖了大、中、小型机等几十种机型,Oracle数据库成为世界上使用最广泛的关系数据系统之一。
‘叁’ 数据库oracle简介
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
特点
1、完整的数据管理功能:[2]
1)数据的大量性
2)数据的保存的持久性
3)数据的共享性
4)数据的可靠性
2、完备关系的产品:
1)信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
2)保证访问的准则
3)视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
4)数据物理性和逻辑性独立准则
3、分布式处理功能:
ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sql*Net、SQL*CONNECT和其他非ORACLE的关系型产品构成。
4、用ORACLE能轻松的实现数据仓库的操作。
这是一个技术发展的趋势,不在这里讨论。
优点
■ 可用性强
■ 可扩展性强
■ 数据安全性强
■ 稳定性强
‘肆’ Oracle系统的简介
Oracle是由甲骨文公司开发出来的,并于1989年正式进入中国市场,成为第一家进入中国的世界软件巨头。当然,当时的Oracle尚名不见经传,由Oracle开发的商用关系型数据库技术即年开始服务于中国用户。1991年7月,Oracle在北京建立独资公司。Oracle数据库,是积聚了众多领先性的数据库系统,在集群技术、高可用性、商业智能、安全性、系统管理等方面都领跑业界。
与Oracle数据库基本同时期的还有informix数据库系统。两者使用的用户有所侧重。Oracle数据库系统银行业使用较多,informix数据库系统,通讯业使用较多。
由于ORACLE数据库产品是当前数据库技术的典型代表,她的产品除了数据库系统外,还有应用系统、开发工具等。刚接触Oracle的人员都有这样的感觉:Oracle的产品太多,每个产品内容精深,不知道从哪儿开始学才好。为了用少量时间更好地理解和使用oracle数据库系统,有必要对oracle的一些基本术语及概念进行了解,下面给出一些在管理中经常用到的概念和术语,供初学者快速了解Oracle数据库系统提供方便。
ORACLE7和ORACLE8
ORACLE7是一种完全的关系数据库系统,它不支持面向对象。 ORACLE8 则是一个引入面向对象的数据库系统,它既非纯的面向对象的数据库也非纯的关系数据库,它是两者的结合,因此叫做“对象关系数据库”。
ORACLE8和ORACLE8i
在ORACLE8 的后来版本中不断作过多次的完善,出现 ORACLE 8.0.X 版本。然而1998年初发行(推出)的 ORACLE 8I 可以被看作是 ORACLE 8 的功能扩展集。 由于ORACLE 8I 比 ORACLE 8 提供了更多的功能,它除了共同的RDBMS功能外,还提供了许多与INTERNET 有关的能力,最重要的是它将 JAVA 集成为一种内部的数据语言,这种语言可充当或替代品,而且它还集成了一个WEB服务器和开发平台(Web DB )。对ORACLE 8.0.x 来说只到 ORACLE 8.0.5 版本就终止了,接着就推出了 ORACLE8i 8.1.5版本,ORACLE8i 8.1.5版本也经常被称为Release 1;而ORACLE8i 8.1.6版本被称为Release 2;ORACLE8i 8.1.7版本被称为Release 3。
ORACLE8i和ORACLE9i
在正式进入21世纪前的2000年年底,ORACLE公司正式发布了ORACLE 9i新数据库系统。原先预料可能会有ORACLE 8i V8.1.8等版本,但ORACLE8i版本只推出8.1.7就被Oracle9i所代替。ORACLE公司和其它的软件公司一样,为了抢占市场,不再愿意在原来版本上再作更多的改进和优化工作,而是直接的推出新产品这样一种策略。ORACLE9i 与ORACLE8i 比较,ORACLE 9i 主要包括下面三大部分:
l数据库核心(Database ) l应用服务器(Application Server )
l 开发工具集(Developer Suite ) Oracle9i 主要焦点(Oracle9i Focus ):
l电子商务智能化( E-Business Intelligence )。
l应用开发( Applications Development )
l应用主机( Applications Hosting )
l 门户与内容( Portals and Content )
l 电子商务连续性( E-Business Continuity ) Oracle9i 为了结合 Internet 市场设计。
Oracle9i适合并胜任市场上所有的苛刻要求。
l Oracle9I实时应用( Oracle9i Real Application)
l Oracle9I高可用性(Oracle9i High Availability) l Oracle9I系统管理( Oracle9i Systems Management ) l Oracle9I 安全( Oracle9i Security)
Oracle9i数据库服务(Oracle9i Database Services):
l商业智能与数据仓库( Business Intelligence and Data Warehousing)
l Oracle9I动态服务( Oracle9i Dynamic Services)
lOracle9I JAVA 和XML(Oracle9i Java and XML)l 电子商务集成(E-Business Integration)
ORACLE OAS和ORACLE iAS
ORACLE公司的iAS 的早期版本是 ORACLE Web Server ,后来第4版改名为ORACLE APPLICATION SERVER ,2000年底前又改名为 ORACLE9i Internet Application Server(ORACLE iAS)。iAS可以与ORACLE8i 或ORACLE9i 结合在一起的综合开发工具。为创建和部署任何基于网络的应用程序提供了一个完整的Internet 平台,iAS包括了门户、事务应用、商业智能工具、无线上网应用和企业集成等。 Oracle Internet Application Server 提供了行业中最全面的中间层产品,包括通信、表示、商业逻辑、数据缓存和系统服务等。
1.通信服务: 基于Apache的ORACLE HTTP Server,主要包括下面模块: mod_jserv:将对servlet 的HTTP请求分发到Oracle iAS 的Servlet 引擎。 Mod_perl:将perl 程序的HTTP请求分发到Apache Web Server 的Perl Interpreter。 Mod_ssl:提供基于SSL证书的公共密钥,它被用来在客户端和Apache Server 之间进行加密通信。 Mod_plsql:Oracle 专用模块,用来将HTTP请求传到数据库内的PL/SQL和Java存储过程。
2. 表示服务 提供下面方法进行内容表示: Oracle portal(Oracle 门户) Apache Jserver (Apache Java 服务器) Perl Interpreter( Perl解释程序) Oracle JavaServer Pager(JSP) Oracle PL/SQL Server Pages(PSP)
3.商业逻辑服务 可提供以下服务组件: Oracle8i JVM( Java虚拟机) Oracle8i PL/SQL Java 商业组件(BC4J) Form Service Report Service Discoverer Viewer
4.数据管理服务 Oracle 8i cache
5.系统服务 Oracle Enterprise Manager(Oracle企业管理器) Oracle Advanced Security (Oracle 高级安全性) Developer's KITS(开发工具),
包括:l Oracle database client developer's Kit l Oracle XML developer's Kit(XDK) l Oracle LDAP developer's Kit
ORACLE Application R11i
Oracle 公司除了提供完美的数据库系统外,也提供完整的解决方案的套件,即全套应用系统,通常称作 Oracle Application R11i。它是一全面集成的电子商务套件。它包括:
1.数据仓库平台
Oracle 8i 企业级数据库服务器
Oracle Warehouse Builder(数据仓库构造器)
2.商业智能工具集
Oracle Discoverer
Oracle Express产品系列
Oracle darwin
3.Oracle 金融服务应用 l 绩效管理 l客户关系管理l 风险管理
4.ORACLE财务系统基于Internet 的财务管理系统包括下面模块:
商业智能管理
预算管理
合并管理
现金预测管理
员工费用管理
Oracle 财务分析系统
Oracle项目管理系统
工作流程管理
预警系统。
‘伍’ 详细介绍Oracle数据库的聚簇技术
什么是聚簇
聚簇是根据码值找到数据的物理存储位置 从而达到快速检索数据的目的 聚簇索引的顺序就是数据的物理存储顺序 叶节点就是数据节点 非聚簇索引的顺序与数据物理排列顺序无关 叶节点仍然是索引节点 只不过有一个指针指向对应的数据块 一个表最多只能有一个聚簇索引
使用 Oracle 聚簇索引
聚簇是一种存储表的方法 这些表密切相关并经常一起连接进磁盘的同一区域 例如 表 BOOKSHELF 和BOOKSHELF_AUTHOR 数据行可以一起插入到称为簇(Cluster)的单个区域中 而不是将两个表放在磁盘上的不同扇区上 簇键(Cluster Key)可以是一列或多列 通过这些列可以将这些表在查询中连接起来(例如 BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列) 为了将表聚集在一起 必须拥有这些将要聚集在一起的表
下面是create cluster命令的基本格式
create cluster (column datatype [ column datatype] ) [other options];
cluster的名字遵循表命名约定 column datatype是将作为簇键使用的名字和数据类型 column的名字可以与将要放进该簇中的表的一个列名相同 或者为其他有效名字 下面是一个例子
create cluster BOOKandAUTHOR (Col VARCHAR ( ));
这样就建立了一个没有任何内容的簇(象给表分配了一块空间一样) COL 的使用对于簇键是不相干的 不会再使用它 但是 它的定义应该与要增加的表的主键相符 接下罩信来 建立包含在该簇中的表
create table BOOKSHELF (Title VARCHAR ( ) primary key Publisher VARCHAR ( ) CategoryName VARCHAR ( ) Rating VARCHAR ( ) constraint CATFK foreign key (CategoryName) references CATEGORY(CategoryName) ) cluster BOOKandAUTHOR(Title);
在向BOOKSHELF表中插入数据行之前 必须建立一个聚簇索引
create index BOOKandAUTHORndx on cluster BOOKandAUTHOR;
在上面的create table语句中 簇BOOKandAUTHOR(Title)子句放在表的列清单的闭括号的后面 BOOKandAUTHOR是前面建立的聚簇的名字 Title是将存储到聚簇Col 中的该表的列 create cluster语句中可能会有多个簇键 并且在created table语句中可能有多个列存储在这些键中 请注意 没有任何语句明确说明Title列进入到Col 中 这种匹配仅仅是通过位滚亩置做到的 即Col 和Title都是在它们各自的簇语句中提到的第一个对象 多个列和簇键是第一个与第一个匹配 第二个与第二个匹配 第三个与第三个匹配 等等 现在 添加第二个表到聚簇中
create table BOOKSHELF_AUTHOR (Title VARCHAR ( ) AuthorName VARCHAR ( ) constraint TitleFK Foreign key (Title) references BOOKSHELF(Title) constraint AuthorNameFK Foreign key (AuthorName) references AUTHOR(AuthorName) ) cluster BOOKandAUTHOR (Title);
当这两个表被聚在一起时 每个唯一的Title在簇中实际只存储一次 对于每个Title 都从这两个表中附加列
来自这两个表的数物备轮据实际上存放在一个位置上 就好像簇是一个包含两个表中的所有数据的大表一样
散列聚簇
对于散列聚簇 它只有一个表 它通过散列算法求出存储行的物理存储位置 从而快速检索数据 创建散列聚簇时要指定码列的数据类型 数据行的大小及不同码值的个数 如果码值不是平均分布的 就可能有许多行存储到溢出块上 从而会降低查询该表的SQL语句的性能
散列聚簇被用在总是通过主键查询数据的情况 例如要从表 T 查询数据并且查询语句总是是这样
select * from T where id = :x;
这时散列聚簇是一个好的选择 因为不需要索引 Oracle 将通过散列算法得到值 :x 所对应的物理地址 从而直接取到数据 不用进行索引扫描 只通过散列值进行一次表访问
散列聚簇语法示例
lishixin/Article/program/Oracle/201311/18689
‘陆’ ORACLE数据库结构的简介
关于ORACLE数据库结构的简介
ORACLE的数据库结构大家都了解吗?如果不了解,下面我为大家整理了关于ORACLE数据库结构简介的文章,希望能为你提供帮助:
一、物理结构:
1、数据文件:ORACLE数据库包含若干数据文件,数据文件存储数据库数据,包括表、索引等等。数据文件的几个特点:
1)一个数据文件只允许分配给一个数据库
2)数据文件可设置为自动扩展
3)一个或多个数据文件构成表空间
在进行数据库操作的时候,数据库先从内存寻找要操作的数据,如果没有找到的话,再从数据文件取出数据放在内存中,然后才对内存中的数据进行相关的操作。操作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO),而是放在内存中,然后由DBWn进程决定何时批量写入数据文件。
2、控制文件:每一个数据库都有一个或多个控制文件,控制文件包含了数据库的物理结构,包括:
1)数据库名
2)数据文件名及位置
3)重做日志文件名及位置
4)数据库的建立时间等等
一般一个数据库都有若干个控制文件镜像。数据库在打开的时候(ALTER
DATABASE OPEN),会读取控制文件中的信息来打开数据库。当数据库的物理结构发生变化的时候,比如增加一个数据文件、一组重做日志等等,控制文件都会自动地做相应的修改。在数据库物理结构发生变化后,最好重新备份一下控制文件,用于数据库恢复。
3、重做日志文件:重做日志中记录了数据的变化。一般一个数据库都会有两到三组重做日志文件。同一日志组的镜像最好分布于不同的磁盘上。
4、归档日志:当数据库启动归档的时候,重做日志会被自动归档到指定的位置。
5、初始化参数文件:包含了数据库启动时的配置信息
6、警告和跟踪日志文件
1)跟踪文件:每一个后台进程都有一个单独的'跟踪文件,比如当系统发现某一个进程有问题的时候,相关的信息就会写到相应的跟踪文件中。可以从数据库的跟踪文件来发现和调试数据库的错误。
2)警告文件,也叫警告日志。是一个特别的跟踪文件,它记录着数据库启动、运行中的相关信息,它是按时间顺序进行记录的。
7、备份文件
二、逻辑结构
1、表空间:相关逻辑对象的集合。在oracle10g中,在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间。
2、数据块:数据存储在数据块中,一个数据块的大小(DB_BLOCK_SIZE)由操作系统块来决定。可以指定5种,分别为2K、4K、8K、16K、32K。
3、区:一系列连续的数据块组成区,区存储特定类型的数据,比如索引,表等等。
4、段:由一系列区组成段。
1)数据段:对于每一个非聚集表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。分区表中的每一个分区有一个数据段,分区中的数据存储在该段中。
2)索引段:每一个索引有一索引段,存储索引数据。分区索引中的每一分区有一个索引段。
3)回滚段:用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息,在数据库恢复时使用,回滚未提交的事务。系统回滚段用于处理系统事务,不建议用户使用系统回滚段来做其它操作。
4)临时段:当一个SQL语句需要临时工作区时,由ORACLE建立临时段。当语句执行完毕,临时段的区退回给系统。
;‘柒’ Oracle数据库基本知识
Oracle数据库基本知识
Oracle Database,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。本文为大家分享的是Oracle数据库的基本知识,希望对大家有所帮助!
它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。
介绍
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为OracleDatabase 12c。Oracle数据库12c引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。
就业前景
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。
其一、就业面广:ORACLE帮助拓展技术人员择业的广度,全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位,大学生在校期间兴趣广泛,每个人兴趣特长各异,不论你想进入金融行业还是电信行业或者政府机构,ORACLE都能够在你的职业发展中给你最强有力的支撑,成为你最贴身的金饭碗。
其二、技术层次深:如果期望进入IT服务或者产品公司,Oracle技术能够帮助提高就业的深度。Oracle技术已经成为全球每个IT公司必选的软件技术之一,熟练掌握Oracle技术能够为从业人员带来技术应用上的优势,同时为IT技术的深入应用起到非常关键的作用。掌握 Oracle技术,是IT从业人员了解全面信息化整体解决方案的基础。
其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。
Oracle数据库漏洞分析:无需用户名和密码进入你的数据库
一般性的数据库漏洞,都是在成功连接或登录数据库后实现入侵;本文介绍两个在2012年暴露的Oracle漏洞,通过这两种漏洞的结合,可以在不掌握用户名/密码的情况下入侵Oracle,从而完成对数据的窃取或者破坏。这两个漏洞就是CVE-2012-1675和CVE-2012-3137。
引言
国内外很多重要的系统都采用Oracle作为数据存储的数据库;在Oracle中存储着企业或政府大量敏感的信息,在金钱或政治的诱导下,内外部黑客会想法利用管理、网络、主机或数据库的自身漏洞尝试入侵到数据库中,以达到自身的目的。
本文的作者通过对Oracle俩种漏洞的组合研究,设计了一套在不掌握用户名/密码的方式入侵到Oracle中;这种方法,比传统的需要登录到数据库中的入侵方法,具有更大的安全隐患和破坏性。
本文希望通过对这两个漏洞和攻击方法的介绍,能够引起相关人员的重视,完善对数据库安全的措施。
1、概要介绍
本文提供的方法是基于漏洞CVE-2012-1675和CVE-2012-3137对oracle数据库的攻击测试的方法。
CVE-2012-1675漏洞是Oracle允许攻击者在不提供用户名/密码的'情况下,向远程“TNS Listener”组件处理的数据投毒的漏洞。攻击者可利用此漏洞将数据库服务器的合法“TNS Listener”组件中的数据转向到攻击者控制的系统,导致控制远程组件的数据库实例,造成组件和合法数据库之间的中间人攻击、会话劫持或拒绝服务攻击。
CVE-2012-3137漏洞是Oracle Database 10g/11g身份验证协议实现中存在一个设计缺陷,攻击者无需认证即可远程获取数据库用户密码哈希相关数据,从而可以离线暴力破解用户密码,进一步控制数据库系统。
我们通过如下的步骤和过程可以实现对Oracle的入侵:
(1)利用CVE-2012-1675进行TNS劫持,在监听下利用远程注册,注册同名数据库实例;
(2)新登陆的用户,在TNS的负载均衡策略下,有可能流量登录到伪造的监听服务上;
(3)该监听服务对用户的登陆过程进行监控,并将相关数据流量转发到真实的数据库上;
(4)利用CVE-2012-3137获得通讯过程中的认证相关信息;
(5)对认证相关信息进行离线的暴力破解,获得登陆的密码;
(6)试用破解的用户名/密码登陆Oracle,完成对Oracle中数据的访问;
2、通过CVE-2012-1675进行TNS劫持
该漏洞存在于Oracle的所有版本,并且Oracle至今仅是发布了警告性通知,并未提供解决方案。
要想利用CVE-2012-1675漏洞做TNS劫持,首先需要了解TNS机制。如下图所示oracle 通过在本地解析网络服务名到目标主机IP地址,服务端口号,目标数据库名,把这些信息发送到oracle服务器端监听程序,最后再由监听程序递送DBMS。
其中关键点在于监听会按照目标数据库名递送到名称正确的数据库。那么如果一个监听下有2个同名数据库。监听将自动按照负载均衡把这次访问发送到负载低的数据库上,进行连接访问。数据库注册到监听的方法就决定了,能否同时注册同名数据库在同一个监听下。注册方式分为本地注册和远程注册,通过修改参数可以调整为远程注册。
下面是一段可用的TNS劫持的过程:
1.在劫持机上创建一个和目标数据库实例同名的数据库实例。
2.在劫持机上修改 tnsnames.ora 文件
添加
listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=目标机器IP)(PORT=目标机器端口)))
3.在劫持机上用SQL*Plus 顺序执行下面步骤。
1.$ sqlplus / as sysdba
2. SQL> ALTER SYSTEM SETREMOTE_LISTENER='LISTENER_NAME';
3. SQL> ALTER SYSTEM REGISTER;
4.多个客户端,向数据库发起登录。会劫持到一部分客户端的登录信息。
最终达到效果如下图所示:
按照猜想同一个监听下有2个同名实例。客户端访问监听,监听按照客户端中的数据库名信息分配数据库,由于监听下有2个同名数据库,客户端链接很可能会被分配到劫持者的数据库实例下,再通过配置劫持者的本地监听把客户端请求指回原数据库。结构图如下:
测试客户端链接196次。目标数据库实例获得113次,劫持数据库实例获得83次基本满足负载均衡的假设。(注上面实例是local server 下面实例是 remote server)
通过以上方式我们可以截获约一半左右客户端发送到服务器的合法链接。其中获得了服务器IP、端口号、数据库位置、实例名、登录用户名等一系列明文信息和4组密文信息(AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA)。
3、通过CVE-2012-3137进行密码破解
CVE-2012-3137受影响的数据库版本有11.2.0.3,11.2.0.2,11.1.0.7,有使用了SHA-1加密算法的10.2.0.5和10.2.0.4,还有使用了SHA-1的10.2.0.3(运行在z/OS下)版本。
虽然这个漏洞在11.2.0.3中已经解决,但是仅仅数据库客户端和服务器都升级到11.2.0.3并且sqlnet.ora文件中增加SQLNET.ALLOWED_LOGON_VERSION=12才有效。
正如CVE-2012-3137所描述Oracle为了防止第三方通过网络获取登录信息包。而对密码进行了加密处理。本部分只以oracle11.1密码如何破解为例进行说明。
在发起连接之后(oracle牵手完成),客户端和服务器经过协商确定要使用的验证协议。要完成这个任务,客户端首先向数据库发送一个包。包中包含客户端主要信息和所请求的加密方式。数据库确认加密方式有效后,发送一个确认服务包如下图所示:
在通过安全网络服务完成任何所要求的协议之后,数据库用户被O3logon(oracle验证方式) 进行验证,这个协议执行一个序列来向数据库证明客户端拥有密码。为了避免网络第三方截获到密码。首先客户端发送用户名到数据库来表明用户身份。数据库端根据加密协议,其中96位的作为数据库端密钥,20位的作为偏移量,它对每个连接都是不同的。一个典型的数据库端发给客户端的密钥如下:
AUTH_SESSKEY.....COCDD89FIGODKWASDF……………………
客户端根据加密算法向服务器端发送96位的客户端密钥和64位的密码密钥。服务器端计算客户端传入的密码密钥。如果计算后密码密文和数据库中存储的16位密码密文一致则验证通过。
根据这个过程可知上面TNS劫持包中取得的加密信息:AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA这四个值是解密的关键。我们把他们按照SHA1,MD5,AES192进行一系列处理。最终通过数据字典碰撞得到密码明文。
下面这段网上公布的一段示例代码,这段代码与笔者的思路不完全相同,但也能大概地说明这个漏洞的攻击过程:
import hashlib
from Crypto.Cipher import AES
def decrypt(session,salt,password):
pass_hash= hashlib.sha1(password+salt)
key =pass_hash.digest() + 'x00x00x00x00'
decryptor= AES.new(key,AES.MODE_CBC)
plain =decryptor.decrypt(session)
returnplain
session_hex ='6EAAB5422553A7598143E78767'
salt_hex = 'A7193E546377EC56639E'
passwords = ['test','password',''oracle','demo']
for password in passwords:
session_id= decrypt(session_hex.decode('hex'),salt_hex.decode('hex'),password)
print'Decrypted session_id for password "%s" is %s' %(password,session_id.encode('hex'))
ifsession_id[40:] == 'x08x08x08x08x08x08x08x08':
print'PASSWORD IS "%s"' % password
break
4、建议的预防措施
根据以上两段分析,我们可以有如下的预防措施:
(1)在条件许可的情况下,对Oracle进行补丁升级,对Oracle打cpuoct2012-1515893补丁;注意对于cpuoct2012-1515893补丁要求服务器端和应用服务器端同时升级,否则应用系统将无法访问Oracle;
(2)若无法对Oracle升级,要购买或安装具备虚拟补丁功能的数据库安全产品,防止对CVE-2012-3137和CVE-2012-1675的利用;
(3)建立足够强健的口令,不要使用8位以下密码,或者字典库中的口令。
;‘捌’ Oracle数据库的介绍
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一辩没个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;此段作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为Oracle Database 12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性携扒纳可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。