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;
【目的】
使用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
【目的】
限制具有数据库超级管理员(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