作者:彩伦原文链接:关于数据库系统安全防护,以下主要从三个方面来阐述一些安全措施。oracle自身安全----linux系统安全----硬件防火墙oracle数据库自身安全oracle安全加固配置策略:灾备环境加固------帐号权限加固------数据访问控制加固------网络访问控制加固------口令策略加固------审计策略加固------漏洞加固灾备环境加固★★★DataGuard灾备环境部署DataGuard分为物理standby和逻辑standby,我司环境主要考虑用物理standby方式,采用一主多备方案部署。该方式下,主备库之间物理结构、逻辑结构一致,物理备库等同于生产库。在主备库之间的同步方式上,主要考虑两种模式,一种为最大性能,一种为最大可用性。(一)最大性能方式:主备库同步数据采用异步传输,该方式下的数据同步对主库几乎没有任何影响,但是当主库宕机后,主备切换可能会出现部分数据丢失;(二)最大可用方式,该方式介于最大保护和最大性能之间,正常情况下主备之间的是同步的,当网络或者备库出现问题时,主备库同步时等待超时就会自动转为最大性能方式进行异步传输。该方式下对主库性能会有一定的影响,但是当主库宕机时,如果主备库之间是同步方式传输,主备切换几乎不会出现数据丢失,如果主备之间是异步方式传输,主备切换可能会出现部分数据的丢失。★★★RMAN物理备份RMAN(RecoveryManager)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的Oracle工具。它可以备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN可以进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数据块。增量备份虽然只备份变化的那些数据块,但是也会遍历整个数据库,因此花费的时间也是比较长,并且在备份期间对整个数据库的性能影响较大。在备份的策略上oracle的备份方法主要有全备份、增量备份和差异备份。全备份(FullBackup)是每次转储数据库全部数据,生成所有数据的备份,这种备份比较占用时间和存储空间。增量备份(IncrementalBackup)只转储上次转储后更新过的数据。全转储与增量转储相比,从恢复角度看,使用海量转储全备份得到的后备副本进行恢复往往更方便,但对于大型数据库,事务处理又十分频繁,所以增量转储方式更实用更有效。差异备份(DifferentialBackup)融合以上两种备份的优点,首先进行完全备份,其次在以后的每次备份中只备份每个数据文件较上次完全备份所更新的部分(差异数据),所以,数据文件损坏后,利用该时间点之前最近一次的完全备份进行恢复,然后再使用时间点A的差异数据即可完成所有数据的恢复。在oracle备份策略中,可以考虑多极备份或者采用物理备份和逻辑备份结合。★★★DataPumpImpdp/Expdb逻辑备份在oracle10g之前,数据库逻辑备份工具主要是exp/imp,10g之后引入了DataPump,提供的是一种基于服务器的数据提取和恢复的实用工具。DataPump在体系结构和功能上与传统的exp/imp工具相比,有了显著的提升。使用impdp/expdb工具进行逻辑备份,备份方式比较灵活,可以只针对某个用户或者某个用户下的对象(表、索引、存储过程、触发器等等)或者针对整个数据库进行逻辑备份。采用逻辑备份方式虽然灵活,但是只能保证数据的备份,无法对数据库底层(表空间、数据文件、控制文件、参数文件等等)进行备份。并且应用逻辑备份进行恢复时,需要完成数据库底层的构建。因为物理备份方式的不灵活,所以在数据库比较庞大的时候,可以采用物理备份和逻辑备份相结合的方式进行备份,针对某些重要的用户或表每天进行逻辑备份。帐号权限加固★★★最小权限使用规则应该只提供最小权限给用户(包括SYSTEM和OBJECT权限)。从PUBLIC组中撤回不必要的权限或角色。(如:UTL_SMTP、UTL_TCP、UTL_HTTP、UTL_FILE、DBMS_RANDON、DBMS_SQL、DBMS_SYS_SQL、DBMS_BACKUP_RESTORE)撤销不需要的权限和角色,使用SQL语句,如下REVOKEEXECUTEONSYS.UTL_HTTPFROMPUBLIC;REVOKEEXECUTEONSYS.UTL_FILEFROMPUBLIC;REVOKEEXECUTEONSYS.UTL_SMTPFROMPUBLIC;REVOKESELECTONALL_USERSFROMPUBLIC;撤销之后可以验证public是否还具备这些权限:OEM管理器中,安全性-用户-PUBLIC-已授予的对象权限colppformata35SELECTs.privilege||'ON'||s.owner||'.'||NVL(l.longname,s.table_name)pp,s.grantableFROMsys.dba_tab_privss,javasnmlWHEREs.table_name=l.short(+)ANDs.grantee='PUBLIC'ands.privilege='EXECUTE'ands.table_namelike'UTL%';查看用户user拥有的系统权限:SQLselect*fromdba_sys_privswheregrantee='USER';查看用户user拥有的角色:SQLselect*fromdba_role_privswheregrantee='USER';查看用户user拥有的对象权限:SQLselect*fromdba_tab_privswheregrantee='USER';查看DBA角色拥有权限:SQLselect*fromrole_role_privswhererole='DBA';★★★用户帐号管理为了安全考虑,应该锁定Oracle当中不需要的用户;或改变缺省用户的密码。锁定不需要的用户,使用SQL语句:ALTERUSERuserPASSWORDEXPIRE;ALTERUSERuserACCOUNTUNLOCK;注意锁定MGMT_VIEW、DBSNMP、SYSMAN帐号或修改密码。(如果要使用DBConsole,DBSNMP、SYSMAN不能锁定,那么就需要修改密码)DIP、EXFSYS、OUTLN、TSMSYS、WMSYS默认已锁定,确定是否解锁。★★★DBSNMP用户的保护Oracle数据库系统如果采用典型安装后,自动创建一个DBSNMP的用户,该用户允许Oracle系统的智能代理(intelligentAgent),该用户的缺省密码也是“DBSNMP”。如果忘记修改该用户的口令,任何人都可以通过该用户存取数据库系统。其他有威胁的帐号还有:CTXSYS,MDSYS,ORDPLUGINS,ORDSYS,OUTLN等。处理的方法是锁定该账号,或者更换密码。★★★SYS用户Oracle数据库系统安装后,自动创建一个叫做SYS的数据库管理员用户,当该用户sysdba方式连接数据库时,便具有全部系统权限,因而对它的保护尤为重要。因此需要更换SYS用户密码,使其符合密码复杂度要求;新建一个DBA用户,作为日常管理使用。★★★Oracle数据字典的保护设置保护后,可防止其他用户(具有‘ANY’systemprivileges)使用数据字典时,具有相同的‘ANY’权限。更改参数O7_DICTIONARY_ACCESSIBILITY=False如果用户必须需要该权限,赋予其权限SELECTANYDICTIONARY。验证:sys@ORCLshowparameterO7_DICTIONARY_ACCESSIBILITYNAMETYPEVALUE----------------------------------------------------------O7_DICTIONARY_ACCESSIBILITYbooleanFALSE数据访问控制加固★★★$ORACLE_HOME/bin目录权限保护确保对$ORACLE_HOME/bin目录的访问权限尽可能少。运行命令:chown–Roracle:dba$ORACLE_HOME/bin。可以使用命令验证:ls–l$ORACLE_HOME/bin确保该目录下的文件属主为oracle用户,且其他用户没有写权限。★★★关闭远程操作系统认证设置正确识别客户端用户,并限制操作系统用户数量(包括管理员权限、root权限、普通用户权限等)。在数据库的账户管理中删除不必要的操作系统账号。设置参数REMOTE_OS_AUTHENT值为FALSE(SAP系统不可设置为False)。Oracle允许用户通过采用外部验证的方式登录数据库。默认情况下,只允许本机的用户采用外部验证登录到数据库中。当将remote_os_authent这个参数设置为true时,则允许远端用户采用外部验证的方式登录到数据库中。设置(需重启数据库):altersystemsetremote_os_authent=falsescope=spfile;验证:SQLshowparameterremote_os_authentNAMETYPEVALUE----------------------------------------------------------------------------remote_os_authentbooleanFALSE★★★加强服务管理在不影响业务系统正常运行的情况下,停止或禁用与承载业务无关的服务或组件。用操作系统命令查看有无与业务无关的服务或组件,然后使用系统命令停止或禁用该服务与组件。★★★加强对业务数据管理定时检查数据库系统中无效或失效对象,删除数据库中存在无用的、测试的、废弃的表、视图、存储过程等等。网络访问控制加固★★★设置TNS登录的ip访问限制仅允许最少的必要的IP地址可连接TNS监听器。在目录$ORACLE_HOME/network/admin/下修改sqlnet.ora文件,实现TNS登录IP限制,设置下列配置信息:tcp.validnode_checking=yes#允许访问的IPtcp.invited_nodes=(localhost,本机ip,应用服务器ip,管理机ip等)#不允许访问的IPtcp.excluded_nodes=(ip1,ip2,......)修改sqlnet.ora后,需要重启listener服务才能生效。★★★修改默认监听端口oracle的监听端口默认为1521,可以修改为其他端口,修改后需重启监听才能生效。在目录$ORACLE_HOME/network/admin/下修改listener.ora文件,将默认端口号1521改为3521,如下配置:(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))修改PORT的值为新的监听端口-(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=3521))修改之后,重启监听后进行确认:lsnrctlstatus★★★防止远程监听程序的管理通过设置listener.ora文件中的参数ADMIN_RESTRICTIONS_listener_name来防止远程对监听程序的非授权管理。在listener.ora文件中,设置ADMIN_RESTRICTIONS_(listener_name)=ON。设置LISTENER加访问密码:(only9i)修改$ORACLE_HOME/network/admin/listener.ora文件PASSWORDS_LISTENER=10g之后:(监听默认为本地操作系统帐号认证,即禁止远程管理)验证:Lsnrctls