首页数据库oracle数据库加密 关于oracle数据库加密的函数

oracle数据库加密 关于oracle数据库加密的函数

编程之家2023-10-22104次浏览

今天给各位分享oracle数据库加密的知识,其中也会对关于oracle数据库加密的函数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

oracle数据库加密 关于oracle数据库加密的函数

oracle 字段加密

这个主要看软件开发人员的加密方式

一般流程是,

1.新建用户,或者修改密码时候,将用户输入的密码按照一定的加密方式加密后储存在数据库

2.在用户登录的时候,将用户所输入的密码再次进行加密后与数据库内的加密密码对比

这样做的好处是,防止密码在网络传输过程中被截取,比如黑客可以对网络传输的数据进行抓包分析,对于加密的密码在传输过程中不是以明文进行传输,如果被窃取到数据,不能得到有效破解,也是没有用的,这就增加了可靠性。

oracle数据库加密 关于oracle数据库加密的函数

关于oracle数据库加密的函数

Oracle提供两种加密方式:

a)加密 API例如包和 dbms_crypto使用这些包,可以构建我们自己的基础架构,对数据进行加密。这种方法的灵活性最强,但是构建和管理却相当复杂。

b)透明的数据加密是 Oracle数据库;使用该特性后,就不必手动进行密码管理了。

数据库管理密码,但是正如名称所指,加密是透明的——数据仅仅以加密的方式存储而已。在Oracle10g中出现了dbms_crypto替代了之前的dbms_obfuscation_toolkit,DBMS_CRYPTO增加了若干新的加密算法、哈希算法。

DBMS_CRYPTO还撤销了对于public组的执行权限。

Oracle数据库基本知识

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()+'\x00\x00\x00\x00'

decryptor= AES.new(key,AES.MODE_CBC)

plain=decryptor.decrypt(session)

returnplain

session_hex='EA2043CB8B46E3864311C68BDC161F8CA170363C1E6F57F3EBC6435F541A8239B6DBA16EAAB5422553A7598143E78767'

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:]=='\x08\x08\x08\x08\x08\x08\x08\x08':

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数据库可以有两种身份验证的方法即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证因此管理好密码文件对于控制授权用户从远端或本机登录Oracle数据库系统执行数据库管理工作具有重要的意义

Oracle数据库的密码文件存放有超级用户INTERNAL/SYS的口令及其他特权用户的用户名/口令它一般存放在ORACLE_HOME\DATABASE目录下

创建密码文件

在使用Oracle Instance Manager创建一数据库实例的时侯在ORACLE_HOME\DATABASE目录下还自动创建了一个与之对应的密码文件文件名为PWDSID ORA其中SID代表相应的Oracle数据库系统标识符此密码文件是进行初始数据库管理工作的基矗在此之后管理员也可以根据需要使用工具ORAPWD EXE手工创建密码文件命令格式如下

C:\>ORAPWDFILE=< FILENAME>PASSWORD=< PASSWORD> ENTRIES=< MAX_USERS>

各命令参数的含义为

FILENAME密码文件名;

PASSWORD设置INTERNAL/SYS帐号的口令

MAX_USERS密码文件中可以存放的最大用户数对应于允许以SYSDBA/SYSOPER权限登录数据库的最大用户数由于在以后的维护中若用户数超出了此限制则需要重建密码文件所以此参数可以根据需要设置得大一些

有了密码文件之后需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态

设置初始化参数

在Oracle数据库实例的初始化参数文件中此参数控制着密码文件的使用及其状态它可以有以下几个选项

NONE指示Oracle系统不使用密码文件特权用户的登录通过操作系统进行身份验证

EXCLUSIVE指示只有一个数据库实例可以使用此密码文件只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息即允许将系统权限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户

SHARED指示可有多个数据库实例可以使用此密码文件在此设置下只有INTERNAL/SYS帐号能被密码文件识别即使文件中存有其他用户的信息也不允许他们以SYSOPER/SYSDBA的权限登录此设置为缺省值

在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE SHARED情况下 Oracle系统搜索密码文件的次序为在系统注册库中查找ORA_SID_PWFILE参数值(它为密码文件的全路径名);若未找到则查找ORA_PWFILE参数值;若仍未找到则使用缺省值ORACLE_HOME\DATABASE\PWDSID ORA;其中的SID代表相应的Oracle数据库系统标识符

向密码文件中增加删除用户

当初始化参数REMOTE_LOGIN_PASSWORDFILE设置为EXCLUSIVE时系统允许除INTERNAL/SYS以外的其他用户以管理员身份从远端或本机登录到Oracle数据库系统执行数据库管理工作;这些用户名必须存在于密码文件中系统才能识别他们由于不管是在创建数据库实例时自动创建的密码文件还是使用工具ORAPWD EXE手工创建的密码文件都只包含INTERNAL/SYS用户的信息;为此在实际操作中可能需要向密码文件添加或删除其他用户帐号

由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中所以当向某一用户授予或收回SYSOPER/SYSDBA系统权限时他们的帐号也将相应地被加入到密码文件或从密码文件中删除由此向密码文件中增加或删除某一用户实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限

要进行此项授权操作需使用SYSDBA权限(或INTERNAL帐号)连入数据库且初始化参数REMOTE_LOGIN_PASSWORDFILE的设置必须为EXCLUSIVE具体操作步骤如下

创建相应的密码文件;

设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;

使用SYSDBA权限登录 CONNECTSYS/internal_user_passswordASSYSDBA;

启动数据库实例并打开数据库;

创建相应用户帐号对其授权(包括SYSOPER和SYSDBA)授予权限 GRANTSYSDBATOuser_name;

收回权限 REVOKESYSDBAFROMuser_name现在这些用户可以以管理员身份登录数据库系统了

使用密码文件登录

有了密码文件后用户就可以使用密码文件以SYSOPER/SYSDBA权限登录Oracle数据库实例了注意初始化参数REMOTE_LOGIN_PASSWORDFILE应设置为EXCLUSIVE或SHARED任何用户以SYSOPER/SYSDBA的权限登录后将位于SYS用户的Schema之下以下为两个登录的例子

以管理员身份登录

假设用户scott已被授予SYSDBA权限则他可以使用以下命令登录

CONNECTscott/tigerASSYSDBA

以INTERNAL身份登录

CONNECTINTERNAL/INTERNAL_PASSWORD

保护密码文件

查看密码文件中的成员

可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限这些用户也就是相应地存在于密码文件中的成员

修改密码文件的状态

密码文件的状态信息存放于此文件中当它被创建时它的缺省状态为SHARED可以通过改变初始化参数REMOTE_LOGIN_PASSWORDFILE的设置改变密码文件的状态当启动数据库事例时 Oracle系统从初始化参数文件中读取REMOTE_LOGIN_PASSWORDFILE参数的设置;当加载数据库时系统将此参数与口令文件的状态进行比较如果不同则更新密码文件的状态若计划允许从多台客户机上启动数据库实例由于各客户机上必须有初始化参数文件所以应确保各客户机上的初始化参数文件的一致性以避免意外地改变了密码文件的状态造成数据库登陆的失败

修改密码文件的存储位置

密码文件的存放位置可以根据需要进行移动但作此修改后应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置

删除密码文件

lishixinzhi/Article/program/Oracle/201311/16762

好了,文章到这里就结束啦,如果本次分享的oracle数据库加密和关于oracle数据库加密的函数问题对您有所帮助,还望关注下本站哦!

王者荣耀数据库?王者荣耀的游戏数据是什么,能删吗数据库表的作用(数据库中的表都有哪些 作用有什么)