数据库安全

这个题目有些大。不过鉴于年底,又到了事故的多发时断(确实出了事)以示提醒。

ORACLE数据库安全

1.网络安全

在当今应用架构中,多数应用程序都是通过ORACLE提供的监听方式和数据库进行通讯。所以ORACLE的监听程序,成为了数据库是否可以正常提供服务的一个重要环节。

在多数情况下,数据库配置是都是使用了oracle提供的缺省配置或是使用自动注册功能(oracle9i以上)。使用这种配置模式给数据库的安全带来了很大的安全隐患。

隐患1 缺省端口

Oracle的监听服务器程序在缺省启动时,对外的服务端口是1521

C:>lsnrctl start

LSNRCTL for 32-bit Windows: Version 9.2.0.7.0 - Production on 27-12-2007 10:43:07

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

启动tnslsnr:请稍候...

TNSLSNR for 32-bit Windows: Version 9.2.0.7.0 - Production

系统参数文件为C:oracleora92networkadminlistener.ora

写入C:oracleora92networkloglistener.log的日志信息

监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1521)))

监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc)))

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dba)(PORT=1521)))

LISTENER STATUS

------------------------

别名 LISTENER

版本 TNSLSNR for 32-bit Windows: Version 9.2.0.7.0 - Produc

tion

启动日期 27-12-2007 10:43:07

正常运行时间 0 0 小时 0 0

跟踪级别 off

安全性 OFF

SNMP OFF

监听器参数文件 C:oracleora92networkadminlistener.ora

监听器日志文件 C:oracleora92networkloglistener.log

监听端点概要...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc)))

监听器不支持服务

命令执行成功

通过lsnctl工具可以远程连接到监听程序,并可以重新配置和停止监听程序。在日常维护生产备机时,因主机和备机的监听配置一致。在停止备机监听程序时,同时停止了主机的监听程序。

ORACLE数据库现在使用比较普遍,1521端口已经被数据库使用人员所熟知。避免数据库监听遇到网络攻击,在使用监听程序时应改掉缺省端口。

相关配置文件位置是:ORACLE_HOME/network/admin/listener.ora

# LISTENER.ORA Network Configuration File: C:oracleora92networkadminlistener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = dba)(PORT = 1521))

)

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

将以上1521替换为其他端口,启动后新的监听端口生效。

隐患2 缺省服务名

ORACLE公司提供的netca工具,简化了监听程序的配置过程。同时为生产服务器留下了安全隐患。

在生产环境中,listen_name应该使用自定义的方式,不使用oracle自身提供的listen_name。并在启动过程中指定监听名称。

例如

#LISTENER.ORA Network Configuration File: C:oracleora92networkadminlistener.ora

# Generated by Oracle configuration tools.

PRODUCT_LSN =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.71)(PORT = 2525))

)

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = C:oracleora92)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = demo)

(ORACLE_HOME = c:oracleora92)

(SID_NAME = demo)

)

)

TEST_LSN =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.75)(PORT = 1521))

)

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = C:oracleora92)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = demo)

(ORACLE_HOME = c:oracleora92)

(SID_NAME = demo)

)

)

启动过程需要指定相应的监听名称:

启动生产环境监听程序

C:>lsnrctl start product_lsn

启动测试环境监听程序

C:>lsnrctl start test_lsn

通过以上设置非缺省监听名,避免了意外停止服务监听的问题。

隐患3 无口令控制

ORACLE的监听程序可以通过设置口令,避免出现来自系统外的攻击行为。同时避免启停监听服务的误操作行为。

具体操作如下:

LSNRCTL> set password

Password:

命令执行成功

LSNRCTL>

LSNRCTL> save_config

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dba)(PORT=1521)))

保存的LISTENER配置参数。

监听器参数文件 C:oracleora92networkadminlistener.ora

旧的参数文件C:oracleora92networkadminlistener.bak

命令执行成功

LSNRCTL>

执行完以上的操作,会在listener.ora文件中加载一行配置。其中口令部分为密文形式存放。

PASSWORDS_LISTENER = F7DA42E8FE26B964

在设置完口令后,再停止监听程序。监听程序会报告错误,提示没有识别口令。

C:>lsnrctl stop

LSNRCTL for 32-bit Windows: Version 9.2.0.7.0 - Production on 27-12-2007 14:18:13

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dba)(PORT=1521)))

TNS-01169: 监听器尚未识别口令

正确的停止监听程序的方法:

C:>lsnrctl

LSNRCTL for 32-bit Windows: Version 9.2.0.7.0 - Production on 27-12-2007 14:23:18

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

欢迎来到LSNRCTL,请键入"help"以获得信息。

LSNRCTL> set password

Password:

命令执行成功

LSNRCTL> stop listener

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dba)(PORT=1521)))

命令执行成功

LSNRCTL>

隐患4 在线修改

为了防止通过lsnrctl工具动态修改监听配置,可以使用ADMIN_RESTRICTIONS选项。将此选项配置为ON,所有的配置修改操作,并须受手工修改listener.ora文件所用动态使用set命令的操作都被禁止。

添加完参数的文件:

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = dba)(PORT = 1521))

)

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = C:oracleora92)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = demo)

(ORACLE_HOME = c:oracleora92)

(SID_NAME = demo)

)

)

#----ADDED BY TNSLSNR 27-12-2007 14:03:04---

PASSWORDS_LISTENER = F7DA42E8FE26B964

#---------------------------------------------

#ADMIN_RESTRICTIONS_=ON

ADMIN_RESTRICTIONS_LISTENER = ON

添加完参数后再使用set命令修改配置时,就会收到如下的错误:

LSNRCTL> set save_config_on_stop on

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dba)(PORT=1521)))

TNS-12508: TNS:监听器无法分解给定的 COMMAND

2.用户安全

在应用开发阶段,开发人员为了便于对数据库操作。将数据库DBA的权限直接赋予的应用程序帐户,同时在布置生产环境时将开发阶段的安全隐患直接带入了生产环境。

隐患1:权限过多

在部署生产环境时,应该确认应用用户是否有过多的权限。尤其是ulimited_tablespaceDBA两个角色。

在生产环境中应给与收回,单独赋予应用角色。

隐患2:口令简单

数据库管理员账号和应用程序的帐号过于简单。如syssystem帐号还是缺省帐号,应用程序的的口令和帐号一致。这些都是数据库的安全隐患。

在设置口令时,应以数字和字母组合方式,并且口令长度应大于6位。现在oracle数据库6位以内的口令,可以通过工具在1小时内进行破译(oracle9i/10g)。

隐患3:口令验证方式

在生产数据库中,当对数据库使用sys用户进行维护时应该直接登录到主机中,使用命令行的方式进行维护。避免使用远程的SQLNET方式登录主机。

Oracle数据库提供remote_login_passwordfile参数。当参数设置为NONE方式时,sys用户登录系统时使用操作系统方式进行认证,也是说必须登录到主机才可以使用sys用户登录oracle数据库。

同时修改$ORACLE_HOME/network/admin/sqlnet.ora文件,也可以更改sys用户的登录方式。当SQLNET.AUTHENTICATION_SERVICES参数修改为NO,使用sys用户登录系统必须输入口令。

Sqlnet.ora文件配置如下:

SQLNET.AUTHENTICATION_SERVICES = (NO)

此参数可以进行动态修改

修改完成后,使用sys用户登录要求输入口令。

SQL> conn / as sysdba

ERROR:

ORA-01031: insufficient privileges

警告: 您不再连接到 ORACLE

SQL> conn sys/oracle as sysdba

已连接。

SQL>

3.数据安全

在数据库安全中,所有的安全都是围绕在数据的周围。如果没有了数据,也就不涉及安全的问题。所以数据安全是数据安全的重中之重。

隐患1:无备份、备份策略不合理

数据备份是各种数据库平台都提供的一种基本功能。ORACLE数据库提供了两种数据库备份方式:逻辑备份和物理备份方式。

Ø 逻辑备份:使用oracle提供的IMP工具(oracle9i/10g)和impdp(oracle10g),使用此种工具可以按照逻辑(用户)定义进行导出。

Ø Rman备份:rman工具为物理备份方式,最小备份单元为数据块。使用此种备份方式推荐使用catalog方式,并且在每一次备份完成后最好单独备份一次控制文件。因控制文件中包含了rman的备份信息,如果进行恢复也可以通过控制文件找回备份信息。

Rman备份可以在数据归档在线的方式进行备份,但当数据库进行恢复的时候不仅需要备份文件还需要归档文件,所以对归档文件的保护同样重要。尽量将归档文件放置在受保护的共享存储上。

隐患2:只备份无验证

数据库每天都在进行备份操作,每次都都可以看到备份成功的提示。但是由于多种原因,备份的数据不能完成恢复。一种原因是备份的数据不完整,一种是备份的介质损坏。以下提供几种方法,验证介质问题。对于第一种灾难只能靠检查备份策略进行控制。

Ø EXP备份验证

验证exp备份的文件,可以使用IMP方式在没有数据空库中进行数据导入操作,因数据较多可以选取部分数据进行导入。

imp username/password fromuser=username touser=names tables=table_name commit=y

Ø RMAN备份验证

ORACLE提供了rman备份工具,同时这个工具提供了恢复校验方法。

Rman>Restore database validate;

此方法只是模拟进行数据库恢复,只是读取备份文件但不实际的进行恢复操作。使用此项操作一定不要忘记是用validate参数,不然现有的数据将被覆盖。

以下为恢复验证的过程:

RMAN> restore database validate;

启动 restore 27-12-07

正在使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=16 devtype=DISK

通道 ORA_DISK_1: 正在启动数据文件备份集验证

通道 ORA_DISK_1: 已恢复备份段 1

handle=D:ORABAKFULL_DB.LST tag=TAG20071221T105148 params=NULL

通道 ORA_DISK_1: 验证完成

完成 restore 27-12-07

RMAN>

在验证备份时,将消耗目标数据库IOCPU资源。可以考虑使用备机将数据库启动到mount状态,进行验证操作。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19446/viewspace-164236/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/19446/viewspace-164236/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值