ORACLE安全加固篇

PDF文件百度网盘下载:

链接:https://pan.baidu.com/s/1RKkZlY8Z9bke1BzPOWASfw 
提取码:s9dm

1.数据库连接超时设置

【目的】

  数据库自动断开超过10分钟的空闲连接

【配置】

使用oracle用户操作
编辑$ORACLE_HOME/network/admin/sqlnet.ora文件,添加或修改以下内容:
SQLNET.EXPIRE_TIME=10

2.数据库访问源限制

【目的】

  设置只有信任的IP地址才能通过监听器访问数据库

【配置】

使用oracle用户操作
编辑$ORACLE_HOME/network/admin/sqlnet.ora文件,添加或修改以下内容:
tcp.validnode_checking=yes
tcp.invited_nodes=(ip1,ip2...)
记得把数据库主机本机IP添加进去。

3.检查是否在数据库对象上设置了VPD和OLS

【目的】

  使用Oracle提供的虚拟私有数据库(VPD)和标签安全(OLS)来保护不同用户之间的数据交叉访问

【配置】

具体设置:
略
判断命令:
select count(*) from v$vpd_policy;
结果大于等于1则说明设置成功。

4.检查是否配置日志功能/检查是否记录安全事件日志

【目的】

  数据库应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号、登录是否成功、登录时间以及远程登陆时用户使用的IP地址

【配置】

创建记录表LOGON_TABLE:
create table LOGON_TABLE(
logon_user varchar2(255),
logon_ip varchar2(255),
logon_time date
);
创建触发器:
CREATE TRIGGER TRI_LOGON
 AFTER LOGON ON DATABASE
BEGIN
 INSERT INTO LOGON_TABLE VALUES(SYS_CONTEXT('USERENV','SESSION_USER'),SYS_CONTEXT('USERENV','IP_ADDRESS'),SYSDATE);
END;
判断命令:
select count(*) from dba_triggers t where trim(t.triggering_event)=trim('LOGON');
结果大于等于1则说明已创建触发器。

5.检查是否设置记住历史密码次数

【目的】

  用户不能重复使用5次(含5次)内已经使用过的密码

【配置】

修改用户profile配置的PASSWORD_REUSE_MAX为5
alter profile default limit PASSWORD_REUSE_MAX 5;
判断命令:
select profile,limit from dba_profiles t where t.resource_name='PASSWORD_REUSE_MAX';
查看结果是否为5 

6.检查是否存在dvsys用户dbms_macadm对象

【目的】

  将数据库管理员权限和应用数据访问权限分开,来限制有DBA权限用户访问敏感数据

【配置】

判断是否存在dvsys用户:
select count(*) from dba_users t where t.username=upper('dvsys');
结果如果大于等于1则说明存在
判断是否存在dbms_macadm对象:
select count(*) from dba_objects t where t.object_name = 'DBMS_MACADM';
结果如果大于等于1则说明存在

7.检查是否启用数据字典保护

【目的】

  设置只有SYSDBA用户才能访问数据字典基础表(存放数据库有关信息)

【配置】

通过sqlplus查询参数:
show parameter O7_DICTIONARY_ACCESSIBILITY;
或者通过sql查询
select value from v$parameter where name = 'O7_DICTIONARY_ACCESSIBILITY';
如果值为FALSE则说明设置成功;
否则通过以下命令在sqlplus设置:
alter system set O7_DICTIONARY_ACCESSIBILITY=false scope=both;

8.设置密码复杂度

【目的】

  密码复杂度需满足长度至少8位,包含数字、大小写字母和特殊符号

【配置】

查看当前密码复杂度设置:
select profile,limit from dba_profiles where resource_name='PASSWORD_VERIFY_FUNCTION';
如果为NULL则需要配置
先创建相应规则函数Function:
SQL>@ $ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql → [verify_function|verify_function_11G]
再应用规则:
SQL>alter profile default limit password_verify_function verify_function_11G;

9.设置密码有限期

【目的】

  设置账户密码的有限期不长于90天

【配置】

查看当前密码有限期:
select profile,limit from dba_profiles where resource_name='PASSWORD_GRACE_TIME';
如果为unlimited或者不为90则需要修改
alter profile default limit PASSWORD_GRACE_TIME 90;

10.设置失败登陆次数

【目的】

  设置当用户连续认证失败次数超过6次(不含6次),则会设定此账号

【配置】

查看当前失败登陆次数:
select profile,limit from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS';
如果结果为unlimited或者不为6则需要修改
alter profile default limit FAILED_LOGIN_ATTEMPTS 6;

11.设置数据库默认账号密码

【目的】

  修改默认账号的默认密码,避免导致安全威胁

【配置】

查看是否存在默认账号使用默认密码情况:
select count(*) from dba_users_with_defpwd;
结果如果大于等于1则说明存在
修改默认账号密码:
alter user 用户名 identified by 密码; 
用户即是从dba_users_with_defpwd表中查询出来的用户名

12.数据库监听器设置密码

【目的】

  当数据库监听器LISTENER启动(lsnrctl start)和关闭(lsnrctl stop)的时候需要输入密码

【配置】

RAC集群下需要使用grid用户操作,单点数据库则通过oracle用户操作:
$lsnrctl                             # 启动监听器界面
LSNRCTL>change_password              # 设置密码
Old password:                        # 输入旧密码
New password:                        # 输入新密码
Reenter new password:                # 重复一遍新密码
LSNRCTL>save_config                  # 保存配置 

判断条件:$ORACLE_HOME/network/admin/listener.ora是否存在“PASSWORDS_LISTENER” 参数

listener.ora 添加参数“LOCAL_OS_AUTHENTICATION_LISTENER = OFF”设置本地重启或停止监听器也需密码

13.数据库审计策略

【目的】

  根据业务需求定制数据库审计策略

【配置】

提供两种方式,DB和OS
DB是把记录存储再库表aud$当中,而OS则是以文件形式保存在audit_file_dest参数指定的位置(一般是$ORACLE_BASE/admin/adump路径下)
通过设置audit_trail=db|os进行配置
通过audit进行定制相关记录策略

14.删除或锁定无效账号

【目的】

  删除或者锁定无效账号,减少系统安全隐患

【配置】

查询用户:
select * from all_users;
select * from dba_users;
删除或者锁定用户:
---删除用户
drop user 用户名 cascade;
---锁定用户
alter user 用户名 lock;

15.DBA组操作系统用户数量

【目的】

  限制DBA组中的操作系统用户数量,通常DBA组中只有oracle安装用户(oinstall)

【配置】

判断条件:
<1>获取dba组下的用户
grep dba /etc/group | awk -F':' '{print $4}'
<2>根据上一步获取到的用户查看对应的组是否为oinstall
grep oracle /etc/passwd | awk -F':' '{print $4}' | xargs -I {} grep {} /etc/group | awk -F':' '{print $1}'
解决:
删除用户:userdel 用户名
锁定用户:passwd -l 用户名

16.检查是否设置sql92_security字段

【目的】

  当sql92_security被设置为true时,对表进行update、delete等操作时会先校验当前用户是否具有此表的select权限,没有则更新、删除操作失败

【配置】

查询sql92_security参数:
sqlplus下:show parameter sql92_security;
如果为FALSE则未进行设置
修改:
alter system set sql92_security=true scope=both;

 17.数据库设置加密传输

【目的】

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

【配置】

在$ORACLE_HOME/network/admin/sqlnet.ora文件中设置sqlnet.encryption参数
SQLNET.ENCRYPTION_SERVER=required
SQLNET.ENCRYPTION_TYPES_SERVER=加密方式

例如:
SQLNET.ENCRYPTION_SERVER = REQUIRED 
SQLNET.ENCRYPTION_TYPES_SERVER = RC4_256 
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED

 18.限制管理员远程登陆

【目的】

  限制具有数据库超级管理员(SYSDBA)权限的用户远程登陆

【配置】

查看参数:
Sqlplus:show parameter REMOTE_LOGIN_PASSWORDFILE
查看结果是否为NONE
编辑$ORACLE_HOME/network/admin/sqlnet.ora文件:
SQLNET.AUTHENTICATION_SERVICES=(NONE)
修改参数:
alter system set remote_login_passwordfile=none scope=both;

19.数据库权限最小化

【目的】

  再数据库权限配置范围内,应根据业务需要,配置其所需要的最小权限

【配置】

查询数据库权限:
select * from user_sys_privs;
select * from user_role_privs;
select * from user_tab_privs;
修改授权或者回收权限:
---授权
grant 权限 to 用户;
---回收权限
revoke 权限 from 用户;

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

【目的】

  使用数据库角色来管理对象的权限

【配置】

查询角色:
select * from dba_role_privs;
select * from user_role_privs;
详细操作:
---创建角色(不带密码)
create role test;
---创建角色(带密码)
create role test identified by 密码;
---给角色授权查询权限
grant select on 表名 to test;
---把角色授权给用户
grant test to 用户;
---生效(不带密码)
set role test;
---生效(带密码)
set role test identified by 密码;
---撤销角色
revoke 角色名 from 用户;

21.检查是否对用户属性进行控制

【目的】

  对用户的密码策略、资源限制等进行控制

【配置】

为每个新用户创建非默认(DEFAULT)的profile:
create profile test limit
  --密码失败次数
  FAILED_LOGIN_ATTEMPTS 6
  --密码有效期
  PASSWORD_LIFE_TIME 60
  PASSWORD_REUSE_TIME 60
  --历史密码记录
  PASSWORD_REUSE_MAX 5
  --密码复杂度策略
  PASSWORD_VERIFY_FUNCTION xxx函数
  --密码锁定
  PASSWORD_LOCK_TIME 1/24
  PASSWORD_GRACE_TIME 90;
授权用户:
alter user 用户 profile test;
判断:
select count(*) from dba_users t where t.profile not in('DEFAULT','MONITORING_PROFILE');
结果如果大于等于则说明存在新的profile文件

22.数据库认证超时

【目的】

  设置数据库认证超时时间,单位:秒

【配置】

编辑$ORACLE_HOME/network/admin/sqlnet.ora文件:
sqlnet.inbound_connect_timeout=30

附录

文档适用范围:oracle10g,oracle11g

  1. 修改oracle用户的密码、有限期等操作时,需要注意业务应用使用的oracle密码应和修改后保持一致,应先停止应用,避免失败次数过多被锁定,修改密码后再同步到应用配置中,最后恢复应用验证即可。
  2. 开启oracle加密传输,客户端和业务应用侧也应该相应开启配置,避免出现数据传输失败问题。
  3. 设置日志记录表时,可根据需求增添字段,例如机器名(machine)、主机名(hostname)、程序(program)等。
  4. 修改sqlnet.ora文件,保存后无需重启oracle服务只需要重启监听服务"lsnrctl reload"即可生效;但是修改oracle参数时:scope=spfile时需要重启oracle服务才能生效。
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 提供了一系列安全措施,以确保数据库系统的安全性和可靠性。以下是一些主要的 Oracle 安全措施: 1. 身份验证和授权:Oracle 数据库使用身份验证机制来确认连接到数据库的用户身份。它支持多种身份验证方法,如用户名和密码、证书、OAuth 等。同时,Oracle 提供了强大的授权机制,可以限制用户对数据库的访问权限。 2. 访问控制:Oracle 提供了多种访问控制机制,如权限、角色和权限继承等,以限制用户对数据库资源的访问。通过这些机制,可以控制用户对表、视图、存储过程和触发器等对象的访问权限。 3. 数据加密:Oracle 数据库支持数据加密功能,可以对存储在数据库中的数据进行加密。这有助于保护数据的安全性,防止数据泄露。 4. 审计和日志记录:Oracle 提供了审计和日志记录功能,可以记录数据库活动和操作,以便进行安全审计和故障排除。通过审计日志,可以跟踪用户对数据库的访问和操作,并监视潜在的安全风险。 5. 加密传输:Oracle 数据库支持加密传输协议,如 SSL(安全套接字层)和 TLS(传输层安全协议),以确保在数据库和客户端之间传输的数据的安全性。 6. 安全管理器:Oracle 提供了一个安全管理器工具,用于管理数据库安全性。该工具提供了一个界面,用于创建用户、分配权限、设置密码策略等。 7. 漏洞管理:Oracle 不断更新其安全补丁和修复程序,以修复数据库中发现的漏洞。用户应该定期检查 Oracle 官方网站以获取最新的安全公告和补丁程序信息。 8. 安全配置:合理的数据库配置是确保安全性的关键之一。用户应该遵循最佳实践,如限制数据库服务的访问、启用身份验证会话超时、限制远程连接等。 9. 安全审计和调查工具:Oracle 提供了一些安全审计和调查工具,如数据包分析器、审计日志等,用于监视和诊断潜在的安全问题。 总之,Oracle 提供了一系列的 安全措施,以确保数据库系统的安全性和可靠性。用户应该遵循最佳实践,并定期检查官方网站以获取最新的安全公告和补丁程序信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值