Oracle数据库系统安全加固

本加固文档是适用于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_changed

2 (

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 IS

2 BEGIN

3 IF LENGTH(password) < 6 THEN

4 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, //sessionid

login_on_time date, //登入时间

login_off_time date, //登出时间

user_in_db varchar2(30), //登入的db user

machine varchar2(20), //机器名

ip_add varchar2(20), //ip地址         

run_program varchar2(20) //以何程序登录

);

记录登入信息的触发器:

>create or replace trigger login_on_info

afer logon on database

BEGIN

insert 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'); //当前session

END;

记录登出信息的触发器:

>create or replace trigger login_off_info

before logoff on database

BEGIN

update login_log set login_off_time = sysdate where session_id = USERENV('SESSIONID'); //当前session 

exception

when 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分钟的空闲远程连接

记录

备注

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle数据库系统加固规范 目 录 1 账号管理、认证授权 1 1.1 账号 1 1.1.1 SHG-Oracle-01-01-01 1 1.1.2 SHG-Oracle-01-01-02 2 1.1.3 SHG-Oracle-01-01-03 3 1.1.4 SHG-Oracle-01-01-04 4 1.1.5 SHG-Oracle-01-01-05 5 1.1.6 SHG-Oracle-01-01-06 7 1.1.7 SHG-Oracle-01-01-07 8 1.1.8 SHG-Oracle-01-01-08 10 1.2 口令 11 1.2.1 SHG-Oracle-01-02-01 11 1.2.2 SHG-Oracle-01-02-02 12 1.2.3 SHG-Oracle-01-02-03 14 1.2.4 SHG-Oracle-01-02-04 15 1.2.5 SHG-Oracle-01-02-05 16 2 日志配置 18 2.1.1 SHG-Oracle-02-01-01 18 2.1.2 SHG-Oracle-02-01-02 21 2.1.3 SHG-Oracle-02-01-03 22 2.1.4 SHG-Oracle-02-01-04 24 3 通信协议 25 3.1.1 SHG-Oracle-03-01-01 25 3.1.2 SHG-Oracle-03-01-02 26 4 设备其他安全要求 27 4.1.1 SHG-Oracle-04-01-01 27 4.1.2 SHG-Oracle-04-01-02 29 账号管理、认证授权 1 账号 1 SHG-Oracle-01-01-01 "编号 "SHG-Oracle-01-01-01 " "名称 "为不同的管理员分配不同的账号 " "实施目的 "应按照用户分配账号,避免不同用户间共享账号,提高安" " "全性。 " "问题影响 "账号混淆,权限不明确,存在用户越权使用的可能。 " "系统当前状态 "select * from all_users; " " "select * from dba_users; " " "记录用户列表 " "实施步骤 "1、参考配置操作 " " "create user abc1 identified by password1; " " "create user abc2 identified by password2; " " "建立role,并给role授权,把role赋给不同的用户 " " "补充操作说明 " " "1、abc1和abc2是两个不同的账号名称,可根据不同用户" " ",取不同的名称; " "回退方案 "删除用户:例如创建了一个用户 A,要删除它可以这样 " " "做 " " " " " "connect sys/密码 as sysdba; " " " " " "drop user A cascade;//就这样用户就被删除了 " "判断依据 "标记用户用途,定期建立用户列表,比较是否有非法用 " " "户 " "实施风险 "高 " "重要等级 " " "备注 " " 2 SHG-Oracle-01-01-02 "编号 "SHG-Oracle-01-01-02 " "名称 "删除或锁定无效账号 " "实施目的 "删除或锁定无效的账号,减少系统安全隐患。 " "问题影响 "允许非法利用系统默认账号 " "系统当前状态 "select * from all_users; " " "select * from dba_users; " " "记录用户列表 " "实施步骤 "1、参考配置操作 " " "alter user username lock;//锁定用户 " " "drop user username cascade;//删除用户 " "回退方案 "删除新增加的帐户 " "判断依据 "首先锁定不需要的用户 " " "在经过一段时间后,确认该用户对业务确无影响的情况 " " "下,可以删除 " "实施风险 "高 " "重要等级 " " "备注 " " 3 SHG-Oracle-01-01-03 "编号 "SHG-Oracle-01-01-03 " "名称 "限制超级管理员远程登录 " "实施目的 "限制具备数据库超级管理员(SYSDBA)权限的用户远程 " " "登录。。 " "问题影响 "允许数据库超级管理员远程非法登陆 " "系统当前状态 "查看spfile,sqlnet.ora内容 " "实施步骤 "1、参考配置操作 " " "在spfile中设置REMOTE_LOGIN_PASSWORDFILE=NONE来禁 " " "止SYSDBA用户从远程登陆。在sqlnet.ora中设置S
Oracle数据库可以创建多个实例,每个实例都可以有自己的参数设置、内存结构、进程和数据文件。下面是创建多个实例的步骤: 1. 确认系统资源:在创建多个实例之前,需要确认系统是否有足够的资源支持多个实例的同时运行。包括内存、磁盘空间、CPU等。 2. 创建多个实例的参数文件:每个实例都需要有一个单独的参数文件,可以通过复制现有的参数文件并修改其内容来创建新的参数文件。 3. 创建多个实例的密码文件:每个实例都需要有一个单独的密码文件,可以使用orapwd工具来创建。 4. 创建多个实例的监听器:每个实例都需要有一个单独的监听器来处理客户端的连接请求,可以使用Net Configuration Assistant来创建。 5. 创建多个实例的控制文件和数据文件:每个实例需要有自己的控制文件和数据文件,可以通过复制现有的控制文件和数据文件并使用新的文件名来创建新的文件。 6. 启动多个实例:可以通过使用SQL*Plus或Enterprise Manager来启动多个实例。 7. 配置多个实例的网络连接:每个实例都需要有一个唯一的服务名和端口号,可以使用Net Configuration Assistant来配置网络连接。 注意事项: 1. 多个实例的配置需要仔细规划,避免资源争用和性能瓶颈。 2. 多个实例的管理需要有专门的人员负责,避免混淆和错误操作。 3. 多个实例的备份和恢复需要有专门的策略和计划,避免数据丢失和灾难恢复失败。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值