Oracle数据库安全配置标准
XX 公司
Oracle 数据库安全配置标准(试行)
1
目的
为保证公司应用系统的信息安全,规范数据库层面的安全配置操作,制定本标准。 2
范围
本标准适用于公司各个业务系统中使用的Oracle 10g及以上数据库系统。 3
安全配置标准
3.1 安装数据库的主机要求
● 主机应当专门用于数据库的安装和使用; ● 数据库主机避免安装在域控制器上;
● 硬件要求请参考Oracle 10g及以上各发行版自带的发行说明;
● 主机操作系统层面应当保证安全:Oracle 数据库可以安装在Windows Server,Linux,及各类Unix 系统上,数据库软件安装之前,应当保证主机操作系统层面的安全,需要对主机进行安全设置,补丁更新,防病毒软件安装等。 3.2 数据库补丁安装标准
日常运行维护中如果Oracle 推出新的补丁,则应按照《基础平台运维管理办法》的相关规定,在进行评估、验证之后,升级相关补丁。 3.3 数据库口令安全配置标准 3.3.1 密码复杂性配置要求
1. 密码长度至少为8位
2. 必须为DBA 帐户和普通帐户提供复杂的口令,需要包含以下字符: ⏹ 英语大写字母 A, B, C, „ Z ⏹ 英语小写字母 a, b, c, „ z ⏹ 西方阿拉伯数字 0, 1, 2, „ 9
⏹ 非字母数字字符,如标点符号,@, #, $, %, &, *等
⏹ 为用户建profile ,调整PASSWORD_VERIFY_FUNCTION,对密码负载度进行设置:
3.3.2 创建应用账号并授权
创建用户:
SQL>create user username identified by password; 基本授权:
SQL>grant connect,resource to username; 创建表空间:
SQL>create tablespacetablespace_namedatafile ‘/home/oracle/tablespace_name.dbf’ size 500m;
用户与表空间对应:
SQL>alter user username default tablespacetablespace_name; 3.3.3 禁用不必要的数据库帐户
针对每个数据库里的数据库帐号,确保没有测试帐号和无用的帐号存在。如果存在,应该及时禁用。
使用如下语句查看数据库账号,并锁定不必要的账号
SQL> select username,password,account_status,default_tablespace from dba_users;
SQL> alter user test account lock; 3.3.4 修改数据库缺省用户的初始密码
在数据库安装时,应对数据库缺省用户的初始密码及时进行修改。 3.3.5 禁止操作系统与数据库间的单点登录
除软件系统管理用户(如oracle ,grid ,splex )外不允许拥有command line的操作系统用户绕过数据库安全设置而直接访问数据库,即不允许其余用户加入到dba 组中。 3.3.6 强制新用户登录时更改密码
对于新增的数据维护用户,在系统中设置自动控制强制首次登陆修改密码,操作命令如下: alter user username password expire; 3.4 目录和文件安全标准 3.4.1 数据库安装文件系统要求
数据库软件应当安装在支持权限分配的分区文件系统上(如NTFS,EXT3等)。 3.4.2 目录保护配置要求
受保护的目录如下表所示:
对于control file 的配置,要求数据库有2套或以上的Control file 配置,以保证数据库的高安全性。
3.4.4 数据库重做日志的配置要求
对于数据库redo log的配置,要求按照至少3组或以上的redo log,每组redo log含2个或以上的成员进行配置。
3.5 监听器安全配置标准 3.5.1 设置监听器密码
通过设置监听器密码可以阻止大部分的菜鸟黑客的进攻,设置密码有两种方法,一种是通过lsnrctl 命令来设置,另一种是直接修改listener.ora 文件,第一种方法设置的密码是经过加密后存储在listener.ora 中,而第二种方法是以明文的形式放在listener.ora 中的,所以推荐使用第一种方式。具体命令如下:
LSNRCTL>set current_listener LSNRCTL>change_password
old password: New password:
Reenter new password: LSNRCTL>set password Password: LSNRCTL>save_config
设置好密码后,打开listener.ora ,看是否有一条PASSWORDS_的记录,类似于PASSWORDS_LISTENER = F4BAA4A006C26134。为监听器设置了密码后,必须到客户端重新配置连接。
上面的操作只适用于oracle 9i及以前的版本,Oracle10g 以后,设置Listener 密码已经不是安全检查的必要条件了,因为默认在10g 里面除了启动监听的用户之外,其它用户都无法停止Listener (还有另外一些lsnrctl 的命令也同样被禁止了,比如trace, reload等),即使Listener 没有设置密码,因此对于Oracle10g 及以上版本可不设置监听器密码。 3.5.2 开启监听器日志
开启监听器日志功能是为了捕获监听器命令和防止密码被暴力破解。开启监听器日志功能的命令为:
LSNRCTL>set current_listener LSNRCTL>set password Password:
LSNRCTL>set log_directory/network/admin LSNRCTL>set log_file.log LSNRCTL>set log_status on
LSNRCTL>save_config
通过运行上面的命令,监听器将会在/network/admin目录下创建一个.log日志文件,以后可以打开该文件查看一些常见的ORA-错误信息。 3.5.3 设置ADMIN_RESTRICTIONS
在listener.ora 文件中设置了ADMIN_RESTRICTIONS参数后,当监听器在运行时,不允许执行任何管理任何,届时,set 命令将不可用,不论是在服务器本地还是从远程执行都不行,这时如果要修改监听器设置就只有手工修改listener.ora 文件了,通过手工修改listener.ora ,要使修改生效,只能使用lsnrctl reload 命令或lsnrctl stop/start命令重新载入一次监听器配置信息。在listener.ora 文件中手动加入下面这样一行:
ADMIN_RESTRICTIONS_=ON 3.5.4 保护$TNS_ADMIN目录
$TNS_ADMIN目录即我们通常看到的ORACLE_HOME/network/admin目录,它下面包含有listener.ora ,tnsnames.ora ,sqlnet.ora ,protocol.ora 等重要配置文件,前面已经提到,监听器的密码就是保存在listener.ora 中的,如果不保护好,可能造成密码泄露,或整个文件被修改,这个目录下的listener.ora ,sqlnet.ora ,protocol.ora 文件应该只开放给Oracle 主账户(通常是oracle 或Administrator ),而其他账户不能有任何权限,tnsnames.ora 文件在Linux 或Unix 系统上权限可以设置为0644,在windows 上可以设置其他用户为浏览,读取权限。 3.5.5 保护TNSLSNR 和LSNRCTL
在Linux 或Unix 服务器上,应该将这两个文件的权限设为0751,如果想更严格一点,可以设为0700,这样就只有安装oracle 时指定的宿主用户可以执行它们了,这两个文件位于ORACLE_HOME/bin目录下。保护这两个文件的目的是为了防止黑客直接破坏它们,如果tnslsnr 被破坏,监听器肯定不能启动,如果lsnrctl 被破坏,可能植入恶意代码,在运行lsnrctl 时就会执行其它黑客行为。 3.5.6 移除不用的服务
默认安装时,会安装一个PL/SQL外部程序(ExtProc )条目在listener.ora 中,它的名字通常是ExtProc 或PLSExtProc ,但一般不会使用它,可以直接从listener.ora 中将这项移除,因为对ExtProc 已经有多种攻击手段了。有时可能会在多个实例之间拷贝listener.ora ,请检查拷贝来的文件中是否含有不需要的服务,确保只留下确实需要的服务项目,减少监听器受攻击的面。
3.5.7 数据库使用的端口
当Oracle 10g选择TCP/IP网络协议后,数据库监听如下端口:
3.6 数据库备份配置标准
按照《备份管理办法》中的相关要求,使用备份工具,遵循并执行相关备份策略。 3.7 数据库审计配置标准
Oracle 数据库对不用的数据库用户组设置不同的审计策略:
(1)对于应用系统连接数据库用户(包括架构应用用户和外挂应用用户),应通过密码封存的方式来控制此类用户直接登录后台数据库的行为。在此基础上,可不对此类用户开启数据库审计日志。
(2)对于批处理用户,首先要保证此类用户是独立的用户而不是数据库管理用户(即拥有sysdba 和sysoper 权限的用户),其次需要对此类用户的密码和用途进行严格管理,保证只有相应系统的应用系统管理员知悉此用户的密码并只将此用户用于批处理操作。在此基础上,可不对此类用户开启数据库审计日志。
(3)对于数据库管理用户(即拥有sysdba 和sysoper 权限的用户),按照如下方式开启对该类用户所有操作的审计日志:
alter system set audit_sys_operations=TRUE scope=spfile; (重起生效) alter system set audit_trail=OS scope=spfile;(重起生效)
(4)对于除上述用户和监控用户、备份用户之外的数据库用户,按照如下方式开启对ALTER 、AUDIT 、INSERT 、DELETE 、GRANT 、LOCK 、DROP TABLE, CREATE TABLE数据库操作的审计日志:
审计命令:
AUDIT ALTER ANY TABLE; AUDIT INSERT ANY TABLE; AUDIT DELETE ANY TABLE; AUDIT LOCK any table; AUDIT DROP ANY TABLE;
AUDIT CREATE ANY TABLE;
audit grant any object privilege by access; audit grant any role by access; audit grant any privilege by access;
--加上索引和视图: audit alter any index; audit drop any index; audit create any index; audit drop any view; audit create any view;
--关闭审计
noAUDIT ALTER ANY TABLE; noAUDIT INSERT ANY TABLE; noAUDIT DELETE ANY TABLE; noAUDIT LOCK any table; noAUDIT DROP ANY TABLE; noAUDIT CREATE ANY TABLE;
noaudit grant any object privilege ; noaudit grant any role ; noaudit grant any privilege ;
--默认新建对象审计:
SQL> select * from all_def_audit_opts;
ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE FBK REA --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- audit alter on default by session; auditaudit on default by session; audit delete on default by session;
audit grant on default by access; audit lock on default by session; SQL> select * from all_def_audit_opts;
ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE FBK REA --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- S/S S/S -/- S/S A/A -/- -/- S/S -/- -/- -/- -/- -/- -/- -/-
(5)鉴于实际工作中密码封存方式及密码的用途管理存在一定风险,对于上述(1)和(2)类用户需打开重要对象(静态参数表)的审计。
开启的审计内容包括:静态参数表的ALTER 、AUDIT 、INSERT 、DELETE 、DROP TABLE 数据库操作的审计日志;GRANT 操作的活动 “GRANT ANY OBJECT PRIVILEGE”项审计配置。 4
制度解释权和施行日期
4.1本标准由公司xx 室负责解释和修订。 4.1本标准自xxxx 年x 月x 日起施行。