Oracle(Windows)数据库安全加固指导手册

适用版本

Oracle(windows)9i/10g/11gR1/11gR2

  • 安全加固指导
    1.  安全计算环境
      1.  身份鉴别
        1.  检查是否设置数据库口令复杂度
        2.  检查是否设置用户连续失败登录次数

加固要求

应对采用静态口令进行认证的数据库,设置所有开启用户的口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类

加固方法

参考配置操作:以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile SQL>select username,profile from dba_users where account_status='OPEN';

第二步:创建系统默认的口令复杂度函数 切换所在目录SQL>conn /as sysdba SQL>@?/rdbms/admin/utlpwdmg.sql

第三步:采用如下方法之一设置开启用户的密码复杂度 

方法一:将所有开启用户的profile中的PASSWORD_VERIFY_FUNCTION设置为verify_function(oracle11g为verify_function_11G); SQL>alter profile[第一步中的profile] limit PASSWORD_VERIFY_FUNCTION verify_function(oracle11g为verify_function_11G);

方法二:创建一个自定义profile,设置密码复杂度,并应用于开启用户 SQL>create profile [new_profile] limit 属性信息; SQL>alter user 用户名 profile [new_profile]; 注:可在ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql文件中修改函数verify_function(oracle11g为verify_function_11G),原有的代码默认是数字+大小写+符号,长度要大于等于4(verify_function)长度大于等于8(verify_function_11G)。

检查方法

使用命令:

select limit from dba_profiles where RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION' and profile='DEFAULT';

结果中包含VERIFY_FUNCTION_11G语句为符合。

Oracle(11g)

Oracle(18c)

加固情况

备注

加固要求

应设置oracle数据库所有开启用户的连续失败登录次数限制为不大于6次

加固方法

参考配置操作: 以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile SQL>select username,profile from dba_users where account_status='OPEN';

第二步:采用如下方法之一限制开启用户的连续失败登录次数 

  方法一:将所有开启用户的profile中的FAILED_LOGIN_ATTEMPTS设置为期望数值 SQL>alter profile[第一步中的profile] limit FAILED_LOGIN_ATTEMPTS 期望数值;

  方法二:创建一个自定义profile,限定FAILED_LOGIN_ATTEMPTS 不超过 6,并应用于开启用户 SQL>create profile [new_profile] limit 属性信息; SQL>alter user 用户名 profile [new_profile];

检查方法

使用命令:

select * from dba_profiles s where s.profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS';

结果中FAILED_LOGIN_ATTEMPTS的值不大于6为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  禁止用户重复使用规定次数内已使用的口令

加固要求

应配置采用静态口令认证技术的数据库,使所有开启用户不能重复使用最近5次(含5次)内已使用的口令

加固方法

参考配置操作:以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile SQL>select username,profile from dba_users where account_status='OPEN';

第二步:采用如下方法之一限制开启用户的密码重复使用次数

   方法一:将所有开启用户的profile中的PASSWORD_REUSE_MAX设置为期望数值 SQL>alter profile[第一步中的profile] limit PASSWORD_REUSE_MAX 期望数值;

   方法二:创建一个自定义profile,限定 PASSWORD_REUSE_MAX 大于5,并应用于开启用户 SQL>create profile [new_profile] limit 属性信息; SQL>alter user 用户名 profile [new_profile];

检查方法

使用命令:

select dba_profiles.profile,resource_name, limit

from dba_profiles, dba_users

where dba_profiles.profile = dba_users.profile

    and dba_users.account_status='OPEN'

    and resource_name='PASSWORD_REUSE_MAX';

结果中PASSWORD_REUSE_MAX的值大于等于5为符合。

oracle(11g)

加固情况

备注

        1.  检查是否设置数据库用户口令生存周期

加固要求

应对采用静态口令认证技术的数据库,账户口令的生存期不长于90

加固方法

参考配置操作: 以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile SQL>select username,profile from dba_users where account_status='OPEN';

第二步:采用如下方法之一限制开启用户的口令生存期 

  方法一:将所有开启用户的profile中的PASSWORD_LIFE_TIME设置为期望数值 SQL>alter profile[第一步中的profile] limit PASSWORD_LIFE_TIME 期望数值;

  方法二:创建一个自定义profile,限定 PASSWORD_LIFT_TIME 不超过 60,并应用于开启用户 SQL>create profile [new_profile] limit 属性信息; SQL>alter user 用户名 profile [new_profile];

检查方法

使用命令:

select dba_profiles.profile,resource_name, limit

from dba_profiles, dba_users

where dba_profiles.profile = dba_users.profile

    and dba_users.account_status='OPEN'

    and resource_name='PASSWORD_LIFE_TIME';

结果中PASSWORD_LIFE_TIME的值小于等于90为符合。

oracle(11g)

加固情况

备注

        1.  检查是否设置监听器保护
        2.  检查是否对用户的属性进行控制
        3.  检查是否设置数据库口令修改后新口令可使用的最短时间

加固要求

应设置数据库监听器启动密码

加固方法

切换到oracle的管理员,执行下列命令

ORACLE_HOME/bin/lsnrctl LSNRCTL> change_password Old password: <原来的口令> #如果原来没有设置口令就直接回车,否则输入原来的口令

New password: <新口令>

Reenter new password: <新口令>

LSNRCTL> save_config (此步重要,保存当前设置)

oracle(18c)中需要在 oracle net manager 程序中更改密码。

检查方法

查看ORACLE_HOME/network/admin/listener.ora文件

结果中包含LOCAL_OS_AUTHENTICATION_LISTENER = OFF语句为符合。

oracle(11g)

oracle(18c)

加固情况

备注

加固要求

对用户的属性进行控制,包括密码策略、资源限制等

加固方法

1.应为系统开启账户创建profile:

参考配置操作:

针对系统每个账户创建profile,如账户已有profile,可通过修改profile来控制用户属性。

1.新建profile:

SQL>create profile Profile_Name limit

PASSWORD_LIFE_TIME 90      //账号生命周期90天

PASSWORD_REUSE_TIME 60  //口令历史记录保留时间60天

PASSWORD_REUSE_MAX 5   //用户不能重复使用最近5次

PASSWORD_VERIFY_FUNCTION verify_function //用户密码复杂度

PASSWORD_GRACE_TIME 90;    //账号修改宽限天数

ALTER USER UserName PROFILE Profile_Name; //将Profile_Name分配给用户UserName

2.修改profile:

alter profile Profile_name limit

PASSWORD_LIFE_TIME 90      //账号生命周期90天

PASSWORD_REUSE_TIME 60  //口令历史记录保留时间60天

PASSWORD_REUSE_MAX 5   //用户不能重复使用最近5次

PASSWORD_VERIFY_FUNCTION verify_function //用户密码复杂度

PASSWORD_GRACE_TIME 90  //账号修改宽限天数

检查方法

使用命令:

select username,profile from dba_users where username='要查询的用户账号';

select * from dba_profiles where profile='该账号的profile';

结果中包含

PASSWORD_LIFE_TIME 90      //账号生命周期90天

PASSWORD_REUSE_TIME 60  //口令历史记录保留时间60天

PASSWORD_REUSE_MAX 5   //用户不能重复使用最近5次

PASSWORD_VERIFY_FUNCTION verify_function //用户密码复杂度

PASSWORD_GRACE_TIME 90;    //账号修改宽限天数

以上语句为符合

oracle(11g)

oracle(18c)

加固情况

备注

加固要求

应配置数据库所有开启用户的口令被修改后原有口令60天后可以重新使用

加固方法

参考配置操作: 以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile SQL>select username,profile from dba_users where account_status='OPEN';

第二步:采用如下方法之一限制开启用户的口令修改后重新使用应超过的天数 

   方法一:将所有开启用户的profile中的PASSWORD_REUSE_TIME设置为期望数值 SQL>alter profile[第一步中的profile] limit PASSWORD_REUSE_TIME 期望数值;

   方法二:创建一个自定义profile,限定 PASSWORD_REUSE_TIME 不小于 60,并应用于开启用户 SQL>create profile [new_profile] limit 属性信息; SQL>alter user 用户名 profile [new_profile];

检查方法

使用命令:

select username,profile from dba_users where username='要查询的用户账号';

select * from dba_profiles where profile='该账号的profile';

结果中PASSWORD_REUSE_TIME的值不小于60为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否设置超过数据库登录失败次数后锁定该用户的最短时间

加固要求

应设置所有开启用户的登录超过有效次数后的锁定时间不少于1/24天

加固方法

应设置所有开启用户的登录超过有效次数后的锁定时间不少于1/24天:

以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile

SQL>select username,profile from dba_users where account_status='OPEN';

第二步:采用如下方法之一限制开启用户的登录超过有效次数的锁定时间

方法一:将所有开启用户的profile中的PASSWORD_LOCK_TIME设置为期望数值

SQL>alter profile[第一步中的profile] limit PASSWORD_LOCK_TIME 期望数值;

方法二:创建一个自定义profile,限定 PASSWORD_LOCK_TIME 不超过 1/24天,并应用于开启用户

SQL>create profile [new_profile] limit 属性信息;

SQL>alter user 用户名 profile [new_profile];

检查方法

使用命令:

select username,profile from dba_users where username='要查询的用户账号';

select * from dba_profiles where profile='该账号的profile';

结果中PASSWORD_LOCK_TIME的值小于1/24天为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否设置Oracle数据库会话空闲断开时间

加固要求

应在某些应用环境下设置Oracle数据库连接超时,Oracle数据库将自动断开超过规定时间的空闲远程连接

加固方法

在sqlnet.ora中设置下面参数:SQLNET.EXPIRE_TIME=10。

检查方法

查看ORACLE_HOME/network/admin/sqlnet.ora文件

结果中包含SQLNET.EXPIRE_TIME的值不大于10分钟为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否设置数据库账户口令到期后宽限天数

加固要求

在口令到期后,在一定时间内原密码仍可使用,以便管理员进行口令更换

加固方法

参考配置操作: 以dba权限登录sqlplus,执行

第一步:查看当前开启用户及其profile SQL>select username,profile from dba_users where account_status='OPEN';

第二步:采用如下方法之一限制开启用户的口令到达终止时间后的宽限天数 

  方法一:将所有开启用户的profile中的PASSWORD_GRACE_TIME设置为期望数值 SQL>alter profile[第一步中的profile] limit PASSWORD_GRACE_TIME 期望数值;

  方法二:创建一个自定义profile,限定 PASSWORD_GRACE_TIME 不大于90,并应用于开启用户 SQL>create profile [new_profile] limit 属性信息; SQL>alter user 用户名 profile [new_profile];

检查方法

使用命令:

select username,profile from dba_users where username='要查询的用户账号';

select * from dba_profiles where profile='该账号的profile';

结果中profile] limit PASSWORD_GRACE_TIME的值不大于7为符合。

oracle(11g)

oracle(18c)

加固情况

备注

      1.  访问控制
        1.  检查是否限制具备数据库超级管理员(SYSDBA)权限的用户远程登录
        2.  检查是否启用数据字典保护 
        3.  检查是否按照用户分配账号,避免不同用户间共享账号

加固要求

应禁止具有数据库超级管理员(SYSDBA)权限的用户从远程登录

加固方法

1)应限制本地权限帐号登录:手动修改ORACLE_HOME\network\admin\sqlnet.ora配置文件,设置SQLNET.AUTHENTICATION_SERVICES=(NONE)来禁用 SYSDBA 角色的自动登录

2)应禁止具有数据库超级管理员(SYSDBA)权限的用户从远程登陆: 在spfile中设置REMOTE_LOGIN_PASSWORDFILE=NONE来禁止SYSDBA用户从远程登陆: SQL>alter system set remote_login_passwordfile=NONE scope=spfile; SQL>shutdown normal; SQL>startup;

检查方法

查看ORACLE_HOME/network/admin/sqlnet.ora文件

结果中包含 remote_login_passwordfile=NONE语句为符合。

oracle(11g)

加固情况

备注

加固要求

应启用数据字典保护,限制只有SYSDBA用户才能访问数据字典基础表

加固方法

参考配置操作: 通过设置下面初始化参数来限制只有SYSDBA权限的用户才能访问数据字典: SQL>alter system set O7_DICTIONARY_ACCESSIBILITY=FALSE scope=spfile; SQL>shutdown immediate; SQL>startup;

检查方法

使用命令:

show parameter O7_dictionary_accessibility;

结果中O7_DICTIONARY_ACCESSIBILITY参数配置为FALSE为符合。

oracle(11g)

oracle(18c)

加固情况

备注

加固要求

应按照用户分配账号,避免不同用户间共享账号

加固方法

参考配置操作: eg:创建用户A SQL>create user A identified by password; 注意:保证系统至少有两个可登录账号。

检查方法

使用命令:

select username from dba_users;

结果中至少包含两个可登录的账号为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否删除或锁定与数据库运行、维护等工作无关的账号

加固要求

应删除或锁定与数据库运行、维护等工作无关的账号

加固方法

参考配置操作: 

方法一:锁定用户 SQL> alter user <username> account lock;

方法二:删除用户 SQL> drop user <username> cascade; 补充说明: 应删除常用账号外的其他帐号,消除潜在危险帐号,可到附录检查项中查看当前开放的所有数据库帐号。

检查方法

使用命令:

select username from dba_users;

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否设置PUBLIC角色执行权限

加固要求

应设置public角色执行权限

加固方法

SQL>revoke execute on <包名称> from public;

检查方法

使用命令:

select table_name from dba_tab_privs where grantee='PUBLIC' and privilege='EXECUTE' and table_name in ('UTL_FILE','UTL_TCP','UTL_HTTP','UTL_SMTP','DBMS_LOB','DBMS_SYS_SQL','DBMS_JOB');

结果中不包含'UTL_FILE','UTL_TCP','UTL_HTTP','UTL_SMTP','DBMS_LOB','DBMS_SYS_SQL','DBMS_JOB'中的任意一个账号为符合。

oracle(11g)

加固情况

备注

        1.  检查是否设置登录认证方式

加固要求

应设置登录认证方式,明确规则

加固方法

参考配置操作: 在数据库初始化文件 init_实例.ora中修改: SQL>alter system set REMOTE_OS_AUTHENT=FALSE scope=spfile; SQL>shutdown normal; SQL>startup;

检查方法

查看ORACLE_HOME/network/admin/sqlnet.ora文件

结果中包含REMOTE_OS_AUTHENT=FALSE scope=spfile语句为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否使用数据库角色(ROLE)来管理对象的权限

加固要求

应禁止除默认用户(sys、system、sysman)外其他用户有DBA角色权限

加固方法

参考配置操作: SQL>revoke dba from A;收回用户A的DBA权限 说明: 除了默认用户(sys、system和sysman),其他用户都不应赋予dba角色权限。 查看除默认用户(sys、system和sysman)外有DBA权限的用户: SQL>select a.username from dba_users a left join dba_role_privs b on a.username = b.grantee where granted_role = 'DBA' and a.username not in ('SYS','SYSMAN','SYSTEM');

检查方法

使用命令:

select a.username from  dba_users a left join dba_role_privs b on a.username = b.grantee where granted_role = 'DBA' and a.username not in ('SYS','SYSMAN','SYSTEM');

结果中未查询到其他用户为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否进行SQL92安全设置

加固要求

应配置SQL92安全设置

加固方法

SQL> alter system set sql92_security =true scope=spfile; 关闭,重新启动数据库 SQL>shutdown; SQL>startup;

检查方法

查看ORACLE_HOME/network/admin/listener.ora文件

结果中包含sql92_security =true为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否使用Oracle提供的Data Vault选件来限制有DBA权限的用户访问敏感数据

加固要求

应安装并启动DATA VAULT组件

加固方法

参考配置操作: 安装并启动DATA VAULT组件。

检查方法

使用命令:

select * from v$option where parameter = 'Oracle Database Vault';

结果中Oracle Database Vault参数配置为TRUE为符合。

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否根据机器性能和业务需求,设置最大最小连接数

加固要求

应设置最大会话数

设置最大进程连接数

加固方法

1.应设置最大进程连接数:

1)以管理员身份登录数据库,修改进程连接数:

>SQL:alter system set processes=225 scope=spfile;

2)重启数据库,启用参数:

>SQL:shutdown immediate;

>SQL:startup;

(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)

2.应设置最大会话数:

1)以管理员身份登录数据库,修改会话数:

>SQL:alter system set sessions=标准值 scope=spfile;

2)重启数据库,启用参数:

>SQL:shutdown immediate;

>SQL:startup;

(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)

3.11gR2应设置最大会话数:

1)以管理员身份登录数据库,修改会话数:

>SQL:alter system set sessions=标准值 scope=spfile;

2)重启数据库,启用参数:

>SQL:shutdown immediate;

>SQL:startup;

(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)

检查方法

使用命令:

select count(*) from v$process ; 结果中processes的值不大于225为符合

oracle(11g)

oracle(18c)

加固情况

备注

        1.  检查是否更改数据库默认帐号密码

加固要求

应更改数据库帐号的默认密码

加固方法

修改默认帐户和密码,执行如下命令: SQL>alter user username identified by newpassword; 修改密码: SQL>alter user <用户名> identified by < 新密码>; 锁定帐号: SQL>alter user <用户名> account lock;

检查方法

使用以下默认账号和密码登录数据库

1.用户名:sys密码:change_on_install

2.用户名:system密码:manager

3.用户名:scott密码:tiger

若三个默认账号密码均未登录成功为符合。

oracle(11g)

oracle(18c)

加固情况

备注

      1.  入侵防范
        1.  检查是否设置关闭监听器管理功能
        2.  检查是否启用网络连接限制

加固要求

应设置关闭监听器管理功能

加固方法

编辑$ORACLE_HOME/network/admin/listener.ora 在listener.ora文件中手动加入下面这样一行: ADMIN_RESTRICTIONS_listener_name = ON。

检查方法

查看ORACLE_HOME/network/admin/listener.ora文件

结果中包含ADMIN_RESTRICTIONS_listener_name = ON 语句为符合。

oracle(11g)

oracle(18c)

加固情况

备注

加固要求

应配置限制ip登录的开关限制,设置只有信任的IP地址才能通过监听器访问数据库

加固方法

1)应配置限制ip登录的开关限制:修改$ORACLE_HOME\network\admin目录下面的sqlnet.ora文件 类似设置如下: tcp_validnode_checking=YES

2)应设置只有信任的IP地址才能通过监听器访问数据库:需在服务器上的文件$ORACLE_HOME/network/admin/sqlnet.ora中设置以下行: tcp_invited_nodes = (ip1,ip2…)

检查方法

查看ORACLE_HOME/network/admin/sqlnet.ora 文件

结果中包含tcp.invited_nodes = (ip1,ip2…)语句为符合。

oracle(11g)

oracle(18c)

加固情况

备注

      1.  日志审计
        1.  检查是否启用日志审核(审计登录成功与失败)
        2.  检查是否打开监听器日志
      2.  数据保密性
        1.  检查是否使用Oracle提供的高级安全选件来加密客户端与数据库之间或中间件与数据库之间的网络传输数据

加固要求

应设置数据库中AUDIT_TRAIL,日志应至少保存6个月以上

加固方法

设置AUDIT_TRAIL=OS,记录到系统日志中 SQL> alter system set audit_trail='OS' scope=spfile; 重启服务 SQL>shutdown normal; SQL>startup;

检查方法

使用命令:

select * from v$sql;

结果中可查询到审计登录成功与失败日志为符合。

oracle(11g)

oracle(18c)

加固情况

备注

加固要求

设置监听器日志文件

设置监听器日志目录

打开监听器日志

日志应至少保存6个月以上

加固方法

1)检查监听器日志是否打开:切换到oracle的管理员,执行下列命令 $ORACLE_HOME/bin/lsnrctl LSNRCTL> set log_directory <Oracle_install_dir_path路径>/network/admin LSNRCTL> set log_file <sid名称>.log LSNRCTL> set log_status on LSNRCTL> save_config

2)检查监听器日志文件是否存在:切换到oracle的管理员,执行下列命令 $ORACLE_HOME/bin/lsnrctl LSNRCTL> set log_directory <Oracle_install_dir_path路径>/network/admin LSNRCTL> set log_file <sid名称>.log LSNRCTL> set log_status on LSNRCTL> save_config

3)检查日志路径是否存在:切换到oracle的管理员,执行下列命令 $ORACLE_HOME/bin/lsnrctl LSNRCTL> set log_directory <Oracle_install_dir_path路径>/network/admin LSNRCTL> set log_file <sid名称>.log LSNRCTL> set log_status on LSNRCTL> save_config

检查方法

查看ORACLE_HOME/network/admin/listener.ora文件

结果中配置了监听日志文件路径为符合

oracle(11g)

oracle(18c)

加固情况

备注

加固要求

应使用Oracle提供的高级安全选件来加密客户端与数据库之间或中间件与数据库之间的网络传输数据

加固方法

参考配置操作:

方法一:管理界面配置

1. 在Oracle Net Manager中选择“Oracle Advanced Security”

2. 然后选择Encryption。

3. 选择Client或Server选项。

4. 选择加密类型。

5. 输入加密种子(可选)。

6. 选择加密算法(可选)。

7. 保存网络配置,sqlnet.ora被更新

方法二:后台配置:

在sqlnet.ora文件中加入:

SQLNET.ENCRYPTION_SERVER=required

SQLNET.ENCRYPTION_TYPES_SERVER=<encryption algorithm>(如 DES 等)

两行,具体见官网:http://www.orafaq.com/wiki/Network_Encryption。

检查方法

查看ORACLE_HOME/network/admin/sqlnet.ora文件

结果中包含SQLNET.ENCRYPTION_SERVER=required

SQLNET.ENCRYPTION_TYPES_SERVER=<encryption algorithm>(如 DES 等)语句为符合。

oracle(11g)

oracle(18c)

加固情况

备注

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值