Oracle数据库安全加固记录

简介:

一个应用系统做等保,需要对数据库进行安全加固,根据流程需要先在测试环境进行测试通过后应用于生产环境,这里简单记录测试过程,审计内容是评测的重要点,但是生产环境也不便于开启,这里先简单记录之,后面再进行相关内容补充。

1. 删除无用多余的帐号

1)查看帐号及状态

SQL> select username,account_status from dba_users;

USERNAME                       ACCOUNT_STATUS   
------------------------------ --------------------------------    
MGMT_VIEW                      OPEN    
SYS                            OPEN    
SYSTEM                         OPEN    
DBSNMP                         OPEN    
SYSMAN                         OPEN    
ABC                            OPEN    
B                              OPEN    
KOU                            OPEN    
OUTLN                          EXPIRED & LOCKED    
FLOWS_FILES                    EXPIRED & LOCKED    
MDSYS                          EXPIRED & LOCKED    
ORDSYS                         EXPIRED & LOCKED    
SQL>

说明: 如果不使用EM,可以停用MGMT_VIEW,DBSNMP,SYSMAN帐号.

2)删除多余帐号,对于一些测试帐号可以删除掉。

SQL> drop user kou cascade;   
User dropped.    
SQL>

 

2. 锁定多余用户,对于不明用途的帐号可以采用先锁定一段时间,再删除。

(1) 锁定多余用户

SQL> alter user abc account lock;   
User altered.

(2) 解锁用户

SQL> alter user abc account unlock;   
User altered.

SQL> select username,account_status from dba_users;

USERNAME                       ACCOUNT_STATUS   
------------------------------ --------------------------------    
MGMT_VIEW                      OPEN    
SYS                            OPEN    
SYSTEM                         OPEN    
DBSNMP                         OPEN    
SYSMAN                         OPEN    
B                              OPEN    
ABC                            LOCKED    
OUTLN                          EXPIRED & LOCKED    
FLOWS_FILES                    EXPIRED & LOCKED

其它状态参数说明:   
OPEN:            正常的帐户    
LOCKED:          表示这个帐户被锁定;    
EXPIRED:         表示该帐户口令到期,要求用户在下次logon的时候修改口令(系统会在该account被设置为expire后的第一次登陆是提示你修改密码)    
EXPIRED(GRACE):  当设置了grace以后(第一次成功登录后到口令到期后有多少天时间可改变口令,在这段时间内,帐户被提醒修改口令并可以正常登陆,account_status显示为EXPIRED(GRACE).    
LOCKED(TIMED):   这种状态表示失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定,需要注意的是,在Oracle 10g中,默认的DEFAULT值是10次.    
EXPIRED & LOCKED:表示此账户被设置为口令到期且被锁定。    
EXPIRED(GRACE) & LOCKED(TIMED): 当account_stutus为EXPIRED(GRACE)的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定    
EXPIRED & LOCKED(TIMED): 当设置了account expire后,用户又失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定    
EXPIRED(GRACE) & LOCKED: 用户account_status为EXPIRED(GRACE)后,又被DBA 手工锁定帐户后的状态

 

3. 限制超级管理员远程登录

1)默认状态下系统管理员是可以远程登录的,采用如下方式验证。

C:\>sqlplus sys/oracle@orcl181 as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 8 14:51:18 2014   
Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:   
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production    
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

2)限制超级用户远程登录

说明: 远程登录访问不登录密码文件进行验证。

SQL> alter system set remote_login_passwordfile=none scope=spfile;

SQL> shutdown immediate;   
SQL> startup;

3)限制用户使用本地操作系统认证登录

有些安全配置要求,限制本地操作系统认证登录,配置如下。

$ vi /u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora   
SQLNET.AUTHENTICATION_SERVICES=none

4)测试方式

sqlplus system/oracle@orcl as sysdba   
sqlplus / as sysdba

说明: 以上两条如果都启的话,SYSDBA用户将无法登录,数据库也无法启动,如果要进行管理操作,需要变通操作。

 

4. 根据帐号分配最小权限

Oracle提供三种标准的角色: connect,resource和DBA,限制DBA权限的用户使用.

1)帐号拥有的系统权限

SQL> select * from dba_sys_privs where grantee='ABC';

GRANTEE                        PRIVILEGE                                ADM   
------------------------------ ---------------------------------------- ---    
ABC                            UNLIMITED TABLESPACE                     NO

2)帐号拥有的角色

SQL> select * from dba_role_privs where grantee='ABC';

GRANTEE                        GRANTED_ROLE                   ADM DEF   
------------------------------ ------------------------------ --- ---    
ABC                            CONNECT                        NO  YES    
ABC                            RESOURCE                       NO  YES    
SQL>

3)帐号拥有的对象权限

SQL> select * from dba_tab_privs where grantee='ABC';   
no rows selected

4)参考配置操作, 对于DBA权限,需要判断是否需要DBA权限,否则都应取消dba权限,降为普通权,需要应用方DBA进行调整。

示例:oracle数据库表空间及权限调整示例   
http://koumm.blog.51cto.com/703525/1314154

 

5. 帐号密码策略配置

1)Oracle 10g密码策略配置初始配置

说明:通常对管理帐号与维护帐号时行密码策略,业务帐号不做策略限制,例如应用帐号过期,会影响业务的正常使用等情况,默认使用DEFAULT策略。

SQL> SELECT profile FROM dba_users WHERE username='ABC';

PROFILE   
------------------------------    
DEFAULT

SQL>

SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

PROFILE                        RESOURCE RESOURCE_NAME                    LIMIT   
------------------------------ -------- -------------------------------- ----------------------------------------    
DEFAULT                        PASSWORD FAILED_LOGIN_ATTEMPTS            10    
DEFAULT                        PASSWORD PASSWORD_LIFE_TIME               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_REUSE_TIME              UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_REUSE_MAX               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_VERIFY_FUNCTION         NULL    
DEFAULT                        PASSWORD PASSWORD_LOCK_TIME               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_GRACE_TIME              UNLIMITED

SQL>

2) 修改并启动密码复杂度

说明:utlpwdmg.sql脚本中包括密码策略及帐号策略, 该脚本后面是帐号策略的配置,可以事先注释掉,后面再一一启用。

SQL> alter system set resource_limit = true;   
SQL> @$ORACLE_HOME/rdbms/admin/utlpwdmg.sql

3) 修改账号策略

SQL> ALTER PROFILE DEFAULT LIMIT   
PASSWORD_LIFE_TIME 60    
PASSWORD_GRACE_TIME 10    
PASSWORD_REUSE_TIME 1800    
PASSWORD_REUSE_MAX UNLIMITED    
FAILED_LOGIN_ATTEMPTS 3    
PASSWORD_LOCK_TIME 1/1440;    
PASSWORD_VERIFY_FUNCTION verify_function

相关参数说明:   
FAILED_LOGIN_ATTEMPTS:    允许登录失败的次数    
PASSWORD_LOCK_TIME:       达到登录失败次数后,帐户锁定的天数,过了这个天数之后帐户会自动解锁    
PASSWORD_LIFE_TIME:       口令的生存期(天)    
PASSWORD_GRACE_TIME:      口令失效后从第一次成功登录算起的更改口令的宽限期(天)    
PASSWORD_REUSE_TIME:      可以重新使用口令前的天数    
PASSWORD_REUSE_MAX:       可以重新使用口令的最多次数    
PASSWORD_VERIFY_FUNCTION: 检验口令设置的PL/SQL 函数

查看结果:

SQL> set linesize 200;   
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

PROFILE                        RESOURCE RESOURCE_NAME                    LIMIT   
------------------------------ -------- -------------------------------- ----------------------------------------    
DEFAULT                        PASSWORD FAILED_LOGIN_ATTEMPTS            3    
DEFAULT                        PASSWORD PASSWORD_LIFE_TIME               60    
DEFAULT                        PASSWORD PASSWORD_REUSE_TIME              1800    
DEFAULT                        PASSWORD PASSWORD_REUSE_MAX               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_VERIFY_FUNCTION         VERIFY_FUNCTION    
DEFAULT                        PASSWORD PASSWORD_LOCK_TIME               .0006    
DEFAULT                        PASSWORD PASSWORD_GRACE_TIME              10

7 rows selected.

SQL>

# 取消Oracle密码复杂度检查:   
SQL> alter profile default limit password_verify_function null;    
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

4) 可以针对单个用户进行策略限制。

SQL> CREATE PROFILE ABC_PROFILE LIMIT   
PASSWORD_LIFE_TIME UNLIMITED    
PASSWORD_GRACE_TIME 10    
PASSWORD_REUSE_TIME 1800    
PASSWORD_REUSE_MAX UNLIMITED    
FAILED_LOGIN_ATTEMPTS 3    
PASSWORD_LOCK_TIME 1/1440;

SQL> alter user abc profile ABC_PROFILE;   
User altered.

SQL>    
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='ABC_PROFILE';

PROFILE                        RESOURCE RESOURCE_NAME                    LIMIT   
------------------------------ -------- -------------------------------- ----------------------------------------    
ABC_PROFILE                    PASSWORD FAILED_LOGIN_ATTEMPTS            3    
ABC_PROFILE                    PASSWORD PASSWORD_LIFE_TIME               UNLIMITED    
ABC_PROFILE                    PASSWORD PASSWORD_REUSE_TIME              1800    
ABC_PROFILE                    PASSWORD PASSWORD_REUSE_MAX               UNLIMITED    
ABC_PROFILE                    PASSWORD PASSWORD_VERIFY_FUNCTION         NULL    
ABC_PROFILE                    PASSWORD PASSWORD_LOCK_TIME               .0006    
ABC_PROFILE                    PASSWORD PASSWORD_GRACE_TIME              10

 

6. 启动数据字典保护

只有SYSDBA才能访问数据字典基础表,普通用户不能查看X$开头的表。

SQL> show parameter O7_DICTIONARY_ACCESSIBILITY

NAME                                 TYPE        VALUE   
------------------------------------ ----------- ------------------------------    
O7_DICTIONARY_ACCESSIBILITY          boolean     FALSE    
SQL>

SQL> alter system set O7_DICTIONARY_ACCESSIBILITY= TRUE scope = spfile;   
SQL> shutdown immediate;    
SQL> startup;

 

7. 数据库访问控制

只有信任的IP地址才能通过监听器访问数据库,非信任的客户端会被拒绝, 本机IP地址一定要在信任之列。   
通常对应用服务与数据库服务器加入信任列表。

$ vi $ORACLE_HOME/network/admin/sqlnet.ora   
tcp.validnode_checking = yes     
tcp.invited_nodes = (192.168.233.150,192.168.233.151)

#除以下IP地址之外都允许访问。   
tcp.excluded_nodes = (IP1,IP2,...)

重启监听即可。

 

8. 设置空闲连接时间

$ vi $ORACLE_HOME/network/admin/sqlnet.ora   
SQLNET.EXPIRE_TIME = 60

说明:客户端连接后在设置的时间内没有任何操作,客户端会自动断开。

 

9. 操作系统层面限制DBA用户组的用户数量

10. 操作系统层面添加iptables防火墙,限制访问数据库IP

下面是oracle rac 11g集群iptables防火墙示例, 一些数据库安全扫描工具扫不出打了补丁的数据库,只能采取防火墙来禁。

iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT  
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.10.10/32 --dport 1521 -j ACCEPT
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.0.6/32 -i eth0 -j ACCEPT
iptables -A INPUT -s 192.168.0.7/32 -i eth0 -j ACCEPT
iptables -A INPUT -s 192.168.0.8/32 -i eth0 -j ACCEPT
iptables -A INPUT -s 192.168.0.9/32 -i eth0 -j ACCEPT
iptables -A INPUT -s 192.168.0.10/32 -i eth0 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i eth2 -j ACCEPT
iptables -A INPUT -s 10.10.10.0/24 -d 230.0.1.0 -j ACCEPT
iptables -A INPUT -s 10.10.10.0/24 -d 224.0.0.251 -j ACCEPT
iptables -A INPUT -s 20.20.20.0/24 -d 230.0.1.0 -j ACCEPT
iptables -A INPUT -s 20.20.20.0/24 -d 224.0.0.251 -j ACCEPT
iptables -A INPUT -i eth0 -d 230.0.1.0   -j ACCEPT
iptables -A INPUT -i eth0 -d 224.0.0.251 -j ACCEPT
iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP
iptables -P INPUT DROP



本文转自 koumm 51CTO博客,原文链接:http://blog.51cto.com/koumm/1587715,如需转载请自行联系原作者
相关文章
|
16天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
129 64
|
6天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
17 7
|
6天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
11 6
|
6天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
11 5
|
13天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
15天前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
14 1
|
22天前
|
存储 Oracle 关系型数据库
【数据库-Oracle】《Oracle 数据库探秘:基础知识点全攻略》
《Oracle 数据库探秘:基础知识点全攻略》深入介绍 Oracle 数据库的基础知识点,包括数据类型、表结构、查询语句等。通过详细讲解、代码示例和流程图,帮助读者快速掌握 Oracle 数据库的基本操作,为数据库开发和管理打下坚实基础。
25 0
|
21天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
55 3
Mysql(4)—数据库索引
|
6天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
40 2
|
9天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
39 4

推荐镜像

更多