Oracle数据库系统安全加固

440 阅读4分钟

本加固文档是适用于Oracle 11g数据库。明确了Oracle数据库安全配置方面的基本要求。

一. 账号

1.1 为不同的管理员分配不同的账号

操作目的应按照用户分配账号,避免不同用户间共享账号,提高安全性。
检查方法>select * from all_users;>select * from dba_users;
加固方法>create user <用户名> identified by <密码>; //创建用户密码>grant <权限> to <用户名>; //根据需要,分配权限
是否实施
备注需要与管理员确认此项操作不会影响到业务系统的登录

1.2 删除或锁定无效账号

操作目的减少系统无用账号,降低风险
检查方法> select username,profile from dba_users where account_status='OPEN';
加固方法>alter user username lock; //锁定用户>drop user username cascade; //删除用户删除默认的范例数据库账号scott等
记录
备注可能影响到业务系统的登录,需要与管理员确认此项操作

1.3 限制超级管理员远程登录

操作目的限制具备数据库超级管理员(SYSDBA)权限的用户远程登录
检查方法在$ORACLE_HOME/network/admin下查看spfile,sqlnet.ora内容
加固方法修改sqlnet.ora文件,添加或修改为:SQLNET.AUTHENTICATION_SERVICES=(NONE)
记录
备注可能影响到业务系统的登录,需要与管理员确认此项操作

1.4 权限最小化

操作目的在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权限
检查方法>select * from user_sys_privs; //用户拥有的系统权限>select * from user_role_privs; //用户拥有的角色>select * from user_tab_privs; //用户拥有的对象权限
加固方法>grant 权限 to username; //赋予权限>revoke 权限 from username; //收回权限
记录
备注可能影响之前用户的正常使用,需于管理员确认权限分配情况

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

操作目的使用数据库角色(ROLE)来管理对象的权限
检查方法>select * from dba_role_privs; //数据库中所拥有的所有角色>select * from user_role_privs; //用户拥有的角色
加固方法创建并修改角色:>create role <角色>; //创建角色,不指定密码>create role <角色> identified by <密码>; //创建角色,指定密码>alter role <角色> identified by <密码>; //修改角色>Grant select on Table_name to <角色>; //给角色授予权限>Grant select on Table_name to <角色>; //把角色赋予用户(授予角色不是实时的)启用角色: //角色不能立即起作用,需断开并重新连接>set role <角色> identified by <密码>; //有密码的角色>set role <角色>; //无密码的角色
记录
备注

1.6 数据字典保护

操作目的启用数据字典保护,只有SYSDBA用户才能访问数据字典基础表
检查方法>show parameter O7_DICTIONARY_ACCESSIBILITY;
加固方法>alter system set O7_DICTIONARY_ACCESSIBILITY=FALSE scope=spfile; //修改后以普通用户登陆到数据库,不能查看X$开头的表
记录
备注

1.7 检查DBA组用户

操作目的启用数据字典保护,只有SYSDBA用户才能访问数据字典基础表
检查方法#cat /etc/passwd //查看是否有其他用户在DBA组
加固方法#userdel <用户名> //删除用户#passwd -l <用户名> //锁定不必要的用户#passwd -u <用户名> //解锁不必要的用户
记录
备注

二. 口令

2.1 缺省密码长度复杂度限制

操作目的对于采用静态口令进行认证的数据库,口令长度至少6位
检查方法>select profile from dba_users where username='<用户名>'; //查看用户属于的profile文件>select resource_name, limit from dba_profiles where profile = 'PROF_TEST' and resource_type = 'PASSWORD'; //查看用户的profile文件
加固方法设置resource_limit:>show parameter resource_limit;>alter system set resource_limit=true; //当为true时profile文件生效创建profile文件:>create profile prof_user limit; //prof_user为profile文件名创建表passwd_changed:>create table passwd_changed2 (3 user_name varchar2(20) ,4 old_passwd varchar2(100) ,5 new_passwd varchar2(100)6 )7 ;Table created.创建实现密码自定义规则的函数my_password_verify: //举例规则:只设置了密码长度不能小于6位,但6位不能全为数字。其他项未设置>CREATE OR REPLACE FUNCTION my_password_verify (username VARCHAR2 ,password VARCHAR2 ,old_password VARCHAR2 ) RETURN BOOLEAN IS2 BEGIN3 IF LENGTH(password) < 6 THEN4 raise_application_error(-20001,'Password must be at least 6 characters long'); //如果密码长度小于6,返回-20001错误5 END IF;6 INSERT INTO passwd_changed VALUES(username,old_password,password);7 RETURN(TRUE);8 END;9 /Function created.创建或修改profile实施自定义密码验证规则:>create profile TEST_PROFILE limit password_verify_function MY_PASSWORD_VERIFY;Profile created.将需要做密码策略的用户关联到profile文件:>alter <用户> user_name profile default;
记录
备注

2.2 缺省密码生存周期限制

操作目的对于采用静态口令认证技术的设备,帐户口令的生存期不长于90天,减少口令安全隐患
检查方法>select profile from dba_users where username='<用户名>'; //查看用户属于的profile文件>select resource_name, limit from dba_profiles where profile = 'PROF_TEST' and resource_type = 'PASSWORD'; //查看用户的profile文件
加固方法>ALTER PROFILE prof_user LIMIT PASSWORD_LIFE_TIME 90 PASSWORD_GRACE_TIME 7; //帐户口令的生存期不长于90天,宽限期7天
记录
备注

2.3 密码重试限制

操作目的对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过5次,锁定该用户使用的账号
检查方法>select profile from dba_users where username='<用户名>'; //查看用户属于的profile文件>select resource_name, limit from dba_profiles where profile = 'PROF_TEST' and resource_type = 'PASSWORD'; //查看用户的profile文件
加固方法>ALTER PROFILE prof_user LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1/24; //连续5次登录失败锁定,1/24天也就是1小时后自动解锁
记录
备注

2.4 修改默认密码

操作目的更改数据库默认帐号的密码
检查方法>select profile from dba_users where username='<用户名>'; //查看用户属于的profile文件>select resource_name, limit from dba_profiles where profile = 'PROF_TEST' and resource_type = 'PASSWORD'; //查看用户的profile文件
加固方法> ALTER USER <用户> IDENTIFIED BY <密码>;
记录
备注

三. 日志配置

3.1 启用日志记录功能

操作目的数据库应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号、登录是否成功、登录时间以及远程登录时用户使用的IP地址
检查方法>show parameter dump
加固方法建表login_log,用来记录登入登出信息:>create table login_log(session_id int not null, //sessionidlogin_on_time date, //登入时间login_off_time date, //登出时间user_in_db varchar2(30), //登入的db usermachine varchar2(20), //机器名ip_add varchar2(20), //ip地址         run_program varchar2(20) //以何程序登录);记录登入信息的触发器:>create or replace trigger login_on_infoafer logon on databaseBEGINinsert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_add,run_program) select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program from v$session where AUDSID = USERENV('SESSIONID'); //当前sessionEND;记录登出信息的触发器:>create or replace trigger login_off_infobefore logoff on databaseBEGINupdate login_log set login_off_time = sysdate where session_id = USERENV('SESSIONID'); //当前session exceptionwhen others then null;END;
记录
备注触发器与AUDIT会有相应资源开销,请检查系统资源是否充足。特别是RAC环境,资源消耗较大。

3.2 数据库审计策略

操作目的根据业务要求制定数据库审计策略
检查方法>set linesize 200>show parameter audit查看审计策略: >select * from DBA_STMT_AUDIT_OPTS;查看审计日志: >select * from DBA_AUDIT_TRAIL;
加固方法开启审计: >alter system set audit_sys_operations=TRUE scope=spfile; >alter system set audit_trail=db,extended scope=spfile; 查看审计策略: >select * from DBA_STMT_AUDIT_OPTS; >shutdown immediate //重启库生效 >start up 配置审计策略: //参考11g默认开启的审计选项 AUDIT ALTER ANY PROCEDURE ; AUDIT ALTER ANY TABLE ; AUDIT ALTER DATABASE ; AUDIT ALTER PROFILE ; AUDIT ALTER SYSTEM ; AUDIT ALTER USER ; AUDIT CREATE ANY JOB ; AUDIT CREATE ANY LIBRARY ; AUDIT CREATE ANY PROCEDURE ; AUDIT CREATE ANY TABLE ; AUDIT CREATE EXTERNAL JOB ; AUDIT CREATE PUBLIC DATABASE LINK ; AUDIT CREATE SESSION ; AUDIT CREATE USER ; AUDIT DATABASE LINK ; AUDIT DIRECTORY ; AUDIT DROP ANY PROCEDURE ; AUDIT DROP ANY TABLE ; AUDIT DROP PROFILE ; AUDIT DROP USER ; AUDIT EXEMPT ACCESS POLICY ; AUDIT GRANT ANY OBJECT PRIVILEGE ; AUDIT GRANT ANY PRIVILEGE ; AUDIT GRANT ANY ROLE ; AUDIT PROFILE ; AUDIT PUBLIC SYNONYM ; AUDIT ROLE ; AUDIT SYSTEM AUDIT ; AUDIT SYSTEM GRANT ; 取消审计策略: NOAUDIT ALTER ANY PROCEDURE ; NOAUDIT ALTER ANY TABLE ; NOAUDIT ALTER DATABASE ; NOAUDIT ALTER PROFILE ; NOAUDIT ALTER SYSTEM ; NOAUDIT ALTER USER ; NOAUDIT CREATE ANY JOB ; NOAUDIT CREATE ANY LIBRARY ; NOAUDIT CREATE ANY PROCEDURE ; NOAUDIT CREATE ANY TABLE ; NOAUDIT CREATE EXTERNAL JOB ; NOAUDIT CREATE PUBLIC DATABASE LINK ; NOAUDIT CREATE SESSION ; NOAUDIT CREATE USER ; NOAUDIT DATABASE LINK ; NOAUDIT DIRECTORY ; NOAUDIT DROP ANY PROCEDURE ; NOAUDIT DROP ANY TABLE ; NOAUDIT DROP PROFILE ; NOAUDIT DROP USER ; NOAUDIT EXEMPT ACCESS POLICY ; NOAUDIT GRANT ANY OBJECT PRIVILEGE ; NOAUDIT GRANT ANY PRIVILEGE ; NOAUDIT GRANT ANY ROLE ; NOAUDIT PROFILE ; NOAUDIT PUBLIC SYNONYM ; NOAUDIT ROLE ; NOAUDIT SYSTEM AUDIT ; NOAUDIT SYSTEM GRANT ; 查看审计日志: >select * from DBA_AUDIT_TRAIL; 关闭审计: >alter system set audit_trail=none scope=spfile; >alter system set audit_sys_operations=false scope=spfile; >shutdown immediate //重启库生效 >start up
记录
备注AUDIT会有相应资源开销,请检查系统资源是否充足。

四. 通信协议

4.1 信任IP连接监听器

操作目的设置只有信任的IP地址才能通过监听器访问数据库
检查方法#cat $ORACLE_HOME/network/admin/sqlnet.ora
加固方法#vi $ORACLE_HOME/network/admin/sqlnet.ora //添加以下部分 tcp.validnode_checking=yes tcp.invited_nodes=(ip1,ip2……) //允许访问的IP tcp.excluded_nodes=(ip1,ip2……) //禁止访问的IP //tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主
记录
备注

五. 其他要求

5.1 连接超时限制

操作目的设置数据库连接超时,数据库将自动断开超过10分钟的空闲远程连接
检查方法#cat $ORACLE_HOME/network/admin/sqlnet.ora
加固方法#vi $ORACLE_HOME/network/admin/sqlnet.ora SQLNET.EXPIRE_TIME=10 //数据库将自动断开超过10分钟的空闲远程连接
记录
备注