Oracle数据库安全配置手册.docx
《Oracle数据库安全配置手册.docx》由会员分享,可在线阅读,更多相关《Oracle数据库安全配置手册.docx(14页珍藏版)》请在冰豆网上搜索。
![Oracle数据库安全配置手册.docx](https://file1.bdocx.com/fileroot1/2023-1/22/a6b13d29-2e0b-4e76-99b6-fd9e380e1bd7/a6b13d29-2e0b-4e76-99b6-fd9e380e1bd71.gif)
Oracle数据库安全配置手册
Oracle数据库
安全配置手册
Version1.0
版本控制
版本号
日期
参与人员
更新说明
1.0
20131217
王峰
第一章目的与范围
1.1目的
为了加强宝付的数据安全管理,全面提高宝付各业务系统的数据安全水平,保证业务系统的正常运营,提高业务服务质量,特制定本方法。
本文档旨在于规范宝付对各业务系统的Oracle数据库进行安全加固处理。
1.2适用范围
本手册适用于对宝付公司的各业务系统的数据库系统加固进行指导。
1.3数据库类型
数据库类型为Oracle11g。
第二章数据库安全规范
2.1操作系统安全
要使数据库安全,首先要使其所在的平台和网络安全。
然后就要考虑操作系统的安全性。
Oracle使用大量用户不需要直接访问的文件。
例如,数据文件和联机重做日志文件只能通过Oracle的后台进程进行读写。
因此,只有要创建和删除这些文件的数据库管理员才需要在操作系统级直接访问它们。
导出转储文件和其他备份文件也必须受到保护。
可以把数据复制到其他数据库上,或者是作为复制模式的一部分,或者是提供一个开发数据库。
若要保护数据的安全,就要对数据所驻留的每一个数据库及这些数据库的备份进行保护。
如果某人能从含有你的数据备份的数据库中带走备份磁带,那么你在数据库中所做的全部保密工作就失去意义。
必须防止对全部数据备份的非法访问。
2.2帐户安全
为了避免数据库帐户大量耗费系统资源,影响其它用户的正常访问,可以根据应用的实际需要,对数据库帐户所使用的资源(如CPU等)进行限制。
这样可以控制恶意攻击者发起大量的连接及事务破坏数据库系统的正常运行,限制数据库帐户的系统资源可以用profile实施。
此外,数据库创建后,会存在一些内建的帐户,这些帐户都有初始密码。
出于安全的考虑,需要修改这些内建帐户的初始密码,防止恶意攻击者以众所周知的初始密码登录数据库。
另外,对不使用的帐户应锁定,消除帐户安全隐患。
2.3密码安全
用户登录数据库的密码非常重要,一旦密码被窃听,数据库的安全就面临严重的威胁。
从Oracle7.1开始,client远程连接数据库,OracleNet会自动对通过网络传输的登录密码进行加密,保证密码不被明文传输而被窃听。
在Oracle7.1之前,可在sqlnet.ora中设置ora_encrypt_login=true。
此外,对密码进行严格的管理。
可以使用profile来管理口令的终止、重新使用和复杂性。
例如,可以限制一个口令的寿命、锁定口令过旧的帐户等。
也可以强制一个口令至少有一定程度的复杂性并锁定一个多次注册失败的帐户。
这样可以有效地防止黒客猜测帐户口令,减少口令安全隐患。
2.4访问权限安全
对帐户的访问权限进行严格控制,给予帐户需要的最少权限,包括系统权限和对象权限。
对象权限可以实施到数据库对象的字段级别。
2.5日志记录
Oracle的警告日志alertsid.log里记录有数据库的关键活动,如删除表空间等,出于安全的考虑,需有规律地检查警告日志。
2.6加密
为了保证敏感数据从client到server在传输过程中不被窃听,可以对数据进行加密,以密文进行传输。
2.7管理员客户端安全
为了防止恶意用户冒名顶替管理员从远端客户机连接数据库进行破坏,可以对远端数据库的IP地址进行限定。
当然这种方法如果和网络安全一起实施,会更加安全。
2.8安全补丁
Oracle虽然具有很高的安全性,但是不可避免还是有安全漏洞,一个比较安全的办法是时刻关注Oracle的安全公告,并及时安装安全补丁。
安全公告和补丁位置如下:
2.9审计
出于数据库的安全,需要实施审计以跟踪重要的或可疑的数据库活动。
审计通常被认为是最有效的安全机制,它确保系统的合法用户做他们应该做的事情,并且能够阻止用户滥用或误用访问权限。
通过审计,一个公司可以跟踪其各个用户的活动,从而发现安全上的缺陷。
另外,如果用户知道他们正在被跟踪审计,那么就可能降低他们滥用职权的可能性。
因为传统型的审计产生数量极大的数据,所以这就很难从中发现有用的信息,因此,Oracle9i引进了精确细化的审计。
使用这种广泛精确细化的审计,可以更容易地发现安全缺陷。
例如,如果为重复选择社会身份认证号码制定了一条审计策略,则当重复选择该社会身份认证号码时,就会自动发生警报,以警告可能被入侵的部门的系统管理员。
然后系统管理员就能采取终止非法数据库会晤的措施。
✓由服务器强制进行的审计捕获用户的活动、系统权限、语句或者对象
✓触发器能够记录未被自动包含在审计追踪中的定制信息
✓精细粒度的、可扩展的审计功能使机构能够定义具体的审计政策,以便在恶意入侵发生时,立刻识别、警告和解决这一入侵--而不管它是来自机构外部还是机构内部
✓事件处理器提供了确定如何处理由触发器启动的某一审计事件的灵活性
✓通过保存初始连接的登录用户及以该用户名义进行操作的用户的身份来审计多层系统中的活动
第三章数据库安全配置手册
3.1Oracle数据库安全配置方法
3.1.1基本漏洞加固方法
1、操作系统安全性
编号:
001
名称:
操作系统安全性
重要等级:
高
基本信息:
若要访问一个数据库,必须首先能够以直接或非直接方式访问正在运行该数据库的服务器。
要使数据库安全,首先要使其所在的平台和网络安全。
然后就要考虑操作系统的安全性。
Oracle使用大量用户不需要直接访问的文件。
例如,数据文件和联机重做日志文件只能通过Oracle的后台进程进行读写。
因此,只有要创建和删除这些文件的数据库管理员才需要在操作系统级直接访问它们。
导出转储文件和其他备份文件也必须受到保护。
可以把数据复制到其他数据库上,或者是作为复制模式的一部分,或者是提供一个开发数据库。
若要保护数据的安全,就要对数据所驻留的每一个数据库及这些数据库的备份进行保护。
如果某人能从含有你的数据备份的数据库中带走备份磁带,那么你在数据库中所做的全部保密工作就失去意义。
必须防止对全部数据备份的非法访问。
检测内容:
✓检查承载平台的安全
✓检查网络的安全
建议操作:
参见主机和网络安全方案
操作结果:
无
操作结果:
确保权限最小化
2、用户环境文件
编号:
002
名称:
用户环境文件
重要等级:
高
基本信息:
可以使用用户环境文件profile来限制可由用户使用的系统和数据库资源并管理口令限制。
如果数据库中没有创建环境文件,将使用缺省环境文件;缺省环境文件指定对于所有用户资源没有限制。
检测内容:
✓检查系统环境文件
建议操作:
明确环境文件创建是否合理:
操作结果:
确保资源调用最小化
3、内建帐户
编号:
003
名称:
内建帐户连接
重要等级:
中
基本信息:
数据库有一些内建帐户,使用这些内建帐户的默认密码,就可以访问该数据库。
对不需要使用的内建帐户进行锁定。
检测内容:
✓检查内建帐户的默认密码是否改变,不需要使用的内建帐户是否已锁定。
建议操作:
✓修改OUTLN密码
ALTERUSERoutlnIDENTIFIEDBY;
✓修改DBSNMP密码
ALTERUSERdbsnmpIDENTIFIEDBY;
编辑$ORACLE_HOME/network/admin/snmp_rw.ora,更改如下行:
SNMP.CONNECT..PASSWORD=
其中,是数据库服务名,是新密码
✓修改SCOTT密码
ALTERUSERscottIDENTIFIEDBY;
✓锁定没有使用的内建帐户
ALTERUSERxxxACCOUNTLOCK;
操作结果:
无
4、口令管理
编号:
004
名称:
口令管理
重要等级:
高
基本信息:
在Oracle中,可以使用profile来管理口令的终止、重新使用和复杂性。
例如,可以限制一个口令的寿命、锁定口令过旧的帐户。
也可以强制一个口令至少有一定程度的复杂性并锁定一个多次注册失败的帐户。
检测内容:
✓检查系统口令设置情况
建议操作:
如果设置用户环境文件的FAILED_LOGIN_ATTEMPTS资源为5,该帐户允许连续注册失败5次,第6次就会引起帐户被锁定。
若要防止一个口令重新使用,可以使用两个环境文件参数的其中一个:
PASSWORD_REUSE_MAX或PASSWORD_REUSE_TIME。
这两个参数互不相容:
如果给其中的一个设了值,另一个就必须设为UNLIMITED。
PASSWORD_REUSE_TIME参数规定一个口令可以重新使用前必须经过的天数。
例如,如果设置PASSWORD_REUSE_TIME为60天,则在60天内不能使用同一个口令。
PASSWORD_REUSE_MAX参数指定一个口令可以重新使用前必须对其改变的次数。
如果试图在这个限制到达前重新使用该口令,Oracle会拒绝口令的修改。
可以强制用户的口令符合复杂度标准。
例如,可以要求口令的最小长度、不是一些简单的词、至少包括一个数字或标点符号。
createprofile和alterprofile命令的PASSWORD_VERIFY_FUNCTION参数指定用于评估口令的函数名。
如果用户提出的口令不符合要求,就不会被接受。
操作结果:
确保口令安全
5、登陆口令
编号:
005
名称:
登陆口令
重要等级:
高
基本信息:
对于Oracle7.1以前,当从一个客户机连接到数据库服务器,或者通过数据库链接从一个数据库连接到另一个数据库时,除非指定其他形式,否则Oracle将以非加密的形式传输输入的口令。
对于Oracle7.1以前,可以设置参数来强制Oracle在传输前将口令值加密。
对于Oracle7.1及以后,Oracle默认将以加密的形式传输输入的口令,不需另外手工配置。
检测内容:
✓检查是否设置了口令加密
建议操作:
对于Oracle7.1以前,若要启用口令加密,需设置以下参数:
•对于客户机,把sqlnet.ora文件中的ORA_ENCRYPT_LOGIN参数设为TRUE。
•对于服务器,把init.ora文件中的DBLINK_ENCRYPT_LOGIN参数设为TRUE。
一旦这些参数被设置(并且关闭和重新启动数据库),口令将以加密的形式在客户机到服务器和服务器到服务器之间传送。
操作结果:
确保登陆安全
6、口令文件验证
编号:
006
名称:
口令文件验证
重要等级:
高
基本信息:
DBA用户可以由操作系统验证。
例如在UNIX系统上,/etc/group文件中DBA组的成员可以内部连接。
如果从远程DBA用户连接数据库,建议使用口令文件验证。
检测内容:
✓检查口令文件情况
建议操作:
1)使用ORAPWD实用程序创建口令文件。
ORAPWDFILE=filenamePASSWORD=passwordENTRIES=max_users
ORAPWD是一个生成口令文件的Oracle实用程序。
执行ORAPWD时,除了SYS访问的口令外,还规定要创建的口令文件的名称。
ENTRIES参数通知Oracle,要在口令文件中创建多少条目。
由于不能在以后扩展该文件,因此要把ENTRIES值设得高一些。
如果超出口令文件条目数的范围限额,就收到一个ORA-1996错误。
重建该口令文件时,需要重新授予SYSDBA和SYSOPER权限。
2)将init.ora文件中的REMOTE_LOGIN_PASSWORDFILE初始参数设置成EXCLUSIVE,关闭并重新启动数据库,以便变更的参数起作用。
3)将SYSOPER和SYSDBA权限授予需要进行数据库管理的每一个用户。
SYSDBA授予用户数据库管理员的权限;SYSOPER使用户能执行数据库操作支持活动。
为了授予用户SYSOPER或SYSDBA权限,必须在内部连接。
被受权用户现在应能通过使用一个与下述命令类似的命令与数据库连接:
connectgeorge/mch11@PROD.WORLDASSYSDBA
如下面例子所示,可以用revoke命令撤消一个用户的SYSDBA或SYSOPER权限:
revokeSYSDBAfromGeorge;
若要查看具有SYSDBA或SYSOPER系统权限的用户,可以查询V$PWFILE_USERS。
如果用户拥有SYSDBA权限,V$PWFILE_USERS在其SYSDBA列中将有一个TRUE值;如果拥有SYSOPER权限,将在其SYSOPER列中有一个TRUE值。
操作结果:
无
7、系统权限
编号:
007
名称:
系统权限
重要等级:
高
基本信息:
可以使用系统级角色分派以管理数据库的系统级命令。
下表列出了Oracle提供的11个系统级角色。
使用这些角色就能对授予数据库管理角色的系统级权限进行限制。
检测内容:
✓检查所有用户的权限
✓检查网络的安全
建议操作:
明确每个用户的权限级别归属:
是否有必要
8、对象权限
编号:
008
名称:
对象权限
重要等级:
高
基本信息:
对象级权限(object-levelprivilege)使用户可以访问不属于自己的数据。
可以使用角色来减少权限的管理。
显式权限也可以使用,并且在一些情况下是必须的。
权限通过grant命令创建,存于数据字典中。
对表、视图、序列(以及它们的同义词)的访问,加上执行过程、函数、软件包及类型的能力都可以授权给用户。
检测内容:
✓检查对象权限
建议操作:
下表列出了可以授予对象的权限。
可以使用withgrantoption子句向授与用户传递授权能力,以便在基对象上进一步授权。
随着角色的出现,这些权限的管理就容易了。
角色是成组的权限,角色可授给用户,这样就大大简化了权限管理进程。
操作结果:
确保权限最小化
9、日志记录
编号:
509
名称:
警告日志文件
重要等级:
高
基本信息:
Oracle的警告日志alertsid.log里记录有数据库的关键活动,如删除表空间等,出于安全的考虑,需有规律地检查警告日志。
检测内容:
✓检查警告日志文件
建议操作:
明确关键的数据库活动是否合理:
操作结果:
无
3.1.2特定漏洞加固方法
一、对传输数据进行加密
如果需要对客户端和服务器端传输的数据进行加密,以防数据窃听,可以修改客户端和服务器端的sqlnet.ora文件,对传输的数据进行加密,以避免明文在网络上的传输。
具体请参阅OracleAdvancedSecurityAdministrator’sGuide——ConfiguringDataEncryptionandIntegrity
二、对于访问数据库的客户端IP地址进行配置。
数据库监听客户端IP地址的连接记录,存储在/$oracle/log/listener.log文件里,请管理员定期查看和分析该日志文件。
在/$oracle/network/admin目录下修改SQLNET.ORA文件,增加如下内容:
tcp.validnode_checking=YES
tcp.excluded_nodes=(192.168.0.1)
对于访问数据库客户端IP的限制,借助操作系统或者防火墙等设备实现也是可行的。
三、安装最新补丁程序
Oracle虽然具有很高的安全性,但是不可避免还有安全漏洞,一个比较安全的办法是时刻关注Oracle的安全公告,并及时安装安全补丁。
安全公告和补丁位置如下:
由于涉及Oracle数据库的业务都是非常关键的,在安装安全补丁前一定要做好备份工作,联系Oracle公司或者你的开发商,定时做补丁升级是非常必要的。
四、对敏感的数据库活动实施审计
对敏感的数据库活动,如删除表等进行审计。
Oracle提供的数据库审计类型有:
●语句审计:
监视由一个或者多个特定用户或者所有用户提交的SQL语句。
这种类型的审计范围非常广。
●特权审计:
监视数据库里一个或者多个特定用户或者所有用户使用的系统权限,比如auditcreatetable。
这种类型的审计范围是中等的。
●模式对象审计:
监视一个模式里在一个或者多个对象上发生的行为,比如:
auditinsertintoEMPLOYEES。
这种类型的审计是非常有重点的,范围狭窄。
设定初始化参数audit_trail为DB或OS。
DB表示将审计记录写到数据库的AUD$表里;OS表示将审计记录写到操作系统文件中,默认生成在$ORACLE_HOME/rdbms/audit目录,审计文件也可以用初始化参数AUDIT_FILE_DEST另外指定。
启用审计
在AUDIT_OPTIONS表里有144个可以审计的审计命令,如:
createtable,insert,select等。
根据实际需要确定要审计的类型,比如,若需知道什么时候一个新表被加到数据库,可通过下列命令启用审计:
auditcreatetableby;
查询审计
select*fromdba_audit_trail;
五、用户管理
5-1过多的用户被授予DBA的权限
用命令SELECT的'DBA'选项列出所有被授予了DBA角色的用户,根据需要分配用户角色,命令:
SELECTGRANTEEFROMDBA_ROLE_PRIVSWHEREGRANTED=’DBA’。
5-2存在把权限授给PUBLIC的情况
删除不需要的帐号,比如SCOTT等示例用户;对于不明确是否能删除的用户可以暂时锁定该用户,或赋予非常复杂的口令。
删除用户及其所有的数据对象命令:
dropuserdbusercascade;
取消用户角色权限:
revokeconnectfromdbuser;
应检查的用户名包括:
SCOTT,DBSNMP,TRACESVR,CTXSYS,MDSYS,DEMO,CTXDEMO,APPLSYS,PO8,NAMES,SYSADM,ORDPLUGIN,OUTLN,ADAMS,BLAKE,JONES,CLARK,AURORA$ORB$UNAUTHENTICATED,APPS。
5-3连接时使用空口令。
修改口令文件PROFILE,防止利用空口令或默认口令进行连接。
六、限制UTL_FILE的使用
与应用系统开发商确认是否有用户需要使用UTL_FILE程序包。
如果没有用户使用,应收回普通用户对该包的执行权限。
如果确实有用户需要使用UTL_FILE包,应确保只有确实需要的用户才拥有UTL_FILE的执行权。
同时在init.ora中设定参数“UTL_FILE_DIR”使用UTL_FILE包的程序确实需要访问的目录。
与应用系统开发商商议,是否可以改变DB_LINK的创建方式,在创建DB_LINK时不指定用户名和口令。
七、数据库配置:
数据库配置未采用数据字典保护。
检查初始化参数O7_DICTIONARY_ACCESSIBILITY是否为FALSE。
该参数为FALSE,将阻止具有ANY权限的用户访问数据字典基表,以有力地保护数据字典。
此参数的修改需要重启数据库才能生效.
Default:
Oracle8i:
TURE
Oracle9i:
FALSE
八、关闭HTTPServer
HTTPServer用于通过HTTP访问数据库,如EM和动态服务。
若无必要,关闭该server:
$>cd$ORACLE_HOME/Apache/Apache/bin
$>apachectlstop
九、关闭远程数据库验证
远程数据库验证只用于当你信任客户端用户时采用。
这种验证机制是:
用户在客户端验证,当用户登录数据库时不再需要用服务器端数据库密码验证,故称为远程数据库验证。
为加强安全起见,关闭远程数据库验证。
设定初始化参数
REMOTE_OS_AUTHENT=FALSE
十、实施VPD和OracleLabelSecurity
如有必要,在普通的数据库安全机制外,还可实施另一种新的安全机制,称为VPD(虚拟专用数据库),帮助从数据库内部提供有效的安全。
这种安全机制的原理是从用户登录到数据库开始,预先为特定用户设定的自定义的安全策略发生作用,使得当用户提交一个查询(或insert,update,delete)时,自动地加上相应的where子句,这样细粒度的访问控制被Oracle自动实现和保证,对用户和应用透明。
例如,使用以下查询从数据库里查询数据:
select*fromcustomers;
如果customers表里有一个相关的安全策略来限制销售代表只能查看自己顾客的信息,这个查询将被自动地重写为:
select*fromcustomerswheresales_rep_id=sys_context(‘hr_context’,‘sales_id’);
比如说,A,B两位销售代表键入的是同一条SQL语句,select*fromcustomers,但返回的结果不同:
A返回的是select*fromorderswheresales_rep_id=406,B返回的是select*fromorderswheresales_rep_id=152,也就是说某个销售代表只能访问到他本人的销售的信息,其他销售代表的信息则访问不了。
被安全策略自动地加到用户的查询上的where子句确保该销售代表只能查看到他自己的客户数据,别人的数据看不到。
销售代表的ID从用户定义的应用程序上下文hr_context里得到。
在VPD里,仍然需要授予用户对每个表的适当的权限,但是你不需要创建视图和过程来防止用户访问其他客户的数据。
因此,不必担心用户通过SQL*PLUS等访问到他们不该访问的数据。
创建和配置VPD的步骤如下:
●确定数据库对象和它们的关系
●定义安全策略目标
●创建应用程序上下文
●创建设置上下文的包
●创建策略函数
●将策略函数与表或者视图相关联
VPD的详细信息请参阅
OracleLabelSecurity为精细化(fine-grained)访问控制提供了基于行标签(rowlabels)的复杂而灵活的安全性。
OracleLabelSecurity借用政府机构、国防部门及商业组织使用的“贴标签”(labeling)概念来保护敏感信息并提供数据