ORACLE数据库安全基础知识

1、数据字典保护node

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

使用show parameters命令来检查参数O7_DICTIONARY_ACCESSIBILITY是否为FALSE数据库

 

2、帐号安全管理安全

一、根据用户的业务须要,配置最小权限session

使用如下SQL查询具备DBA权限的用户oracle

select grantee as usern from dba_role_privswhere granted_role ='DBA' intersect select username from dba_users;

使用如下SQL查询具备DBA权限的角色tcp

select grantee as usern from dba_role_privswhere granted_role ='DBA' minus (select grantee as usern from dba_role_privswhere granted_role ='DBA' intersect select username from dba_users);

二、使用数据库角色(ROLE)来管理对象的权限ide

使用select * from dba_role_privsdba_tab_privs; select* from user_role_privs;查看账号角色;肯定账号权限划分是否明确。工具

 

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

为不一样的业务用户创建不一样的profile,设置数据库口令复杂度,有效期及锁定配置等,Profile参数解释以下:

A.对数据库资源作限制

SESSIONS_PER_USER   每一个用户名所容许的并行会话数

CPU_PER_SESSION     一个会话一共可使用的CPU时间,单位是百分之一秒

CPU_PER_CALL      一次SQL调用(解析、执行和获取)容许使用的CPU时间

CONNECT_TIME      限制会话链接时间,单位是分钟

IDLE_TIME         容许空闲会话的时间,单位是分钟

LOGICAL_READS_PER_SESSION  限制会话对数据块的读取,单位是块

LOGICAL_READS_PER_CALL    限制SQL调用对数据块的读取,单位是块

COMPOSITE_LIMIT          指定一个会话的总的资源消耗,以serviceunits单位表示

PRIVATE_SGA    限制会话在SGAShared Pool中私有空间的分配

 

B.对密码作限制

FAILED_LOGIN_ATTEMPTS 账户被锁定以前能够错误尝试的次数

PASSWORD_LIFE_TIME    密码能够被使用的天数,单位是天,默认值180

PASSWORD_REUSE_TIME  密码可重用的间隔时间(结合PASSWORD_REUSE_MAX)

PASSWORD_REUSE_MAX   密码的最大改变次数(结合PASSWORD_REUSE_TIME)

PASSWORD_LOCK_TIME    超过错误尝试次数后,用户被锁定的天数,默认1

PASSWORD_GRACE_TIME   当密码过时以后还有多少天可使用原密码

PASSWORD_VERIFY_FUNCTION  密码复杂度设置,至少8个字符大写字母+小写字母+数字+特殊符号

 

具体用法举例:

alter profile profile_name limitPASSWORD_VERIFY_FUNCTION verify_function_11g; --设置数据库口令复杂度
alter profile profile_name limit FAILED_LOGIN_ATTEMPTS5 --设置数据库口令输错5次被锁


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

使用show parameters命令来检查参数REMOTE_LOGIN_PASSWORDFILE是否为NONE。(搭建DG,RMAN备份等都须要管理员权限,根据业务设置)

 

五、限制在DBA组中的操做系统用户数量

限制除oracle,grid以外的其它操做系统用户在dba组中,以防止其用户串改或删除oracle软件文件内容。

 

3、可信IP地址访问控制

经过数据库所在操做系统或防火墙限制,只有信任的IP地址才能经过监听器访问数据库,可经过设置$ORACLE_HOME/network/admin/sqlnet.ora文件中参数tcp.validnode_checkingtcp.invited_nodes实现限制,需重启监听。

 

4、默认端口及实例名修改
对于默认的1521端口,应该修改掉默认的监听端口;对于 Oracle TNS Listener SID 能够被猜想,不该该使用安装Oracle时默认的SID(ORCL),应该设置复杂度较高的SID。


5、记录操做事件

一、建立触发器对用户登陆进行日志记录

建表LOGIN_CHECK_LOG

create table login_check_log(session_idnumber(8,0) not null,login_on_time date,user_in_db varchar(50), ip_addressvarchar(20));

建触发器LOGIN_CHECK

create trigger login_check
after logon on database
begin  
 insert into login_check_log(session_id,login_on_time,user_in_db,ip_address)select audsid,sysdate,sys.login_user,sys_context('userenv','ip_address') from v$session where audsid=userenv('sessionid'); 
 end;
/

还能够经过建立数据库链接使用相关的触发器,好比:限制只能IPxxx的客户端使用PL/SQL链接数据库

 

二、数据库应配置日志功能,记录用户对数据库的操做

经过记录操做日志,记录须要包含用户账号,操做时间,操做内容以及操做结果等。好比开启监听器日志。

LSNRCTL>set log_directory  $ORACLE_HOME/diag/tnslsnr/<hostname>/listener/alert/
LSNRCTL>set log_file log.xml
LSNRCTL>set log_status on
LSNRCTL>save_config


三、根据业务要求制定数据库审计策略

使用show parameter命令来检查参数audit_trail是否设置,具备参数以下:

none:是默认值,禁用数据库审计。  

os:启用审计,并将数据库审计记录定向到 OS审计记录。  

db:启用审计,并将数据库审计记录定向到数据库的 SYS.AUD$ 11g此参数默认为 db  

db_extended:启用审计,并将数据库全部审计记录定向的到数据库 SYS.AUD$表中,包含 SYS.AUD$表的 SQLBIND 列和 SQLTEXTCLOB 列。这样审计的结果里面除了链接信息还包含了当时执行的具体语句。  

xml:启用数据库审计,并将全部的记录写到XML 格式的 OS 系统文件中。

xml_extended:启用数据库审计,输出审计记录的全部列,包括 sqltext sqlbind

 

有兴趣的童鞋还能够了解一下ORACLE的安全审计产品:Oracle Audit Vault and Database Firewall AVDF

 

6、数据库漏洞管理

使用主流漏洞扫描工具进行扫描,对于中高危漏洞,应及时修复,检查系统的详细版本号,及时更新ORACLE发布的中高危补丁;对于暂无修复手段的漏洞,应经过其余技术手段进行风险规避。具体请参考:国内外权威的CVE漏洞库。

CVE中文漏洞信息库-SCAP中文社区:http://cve.scap.org.cn/

CVE - Common Vulnerabilities and Exposures(CVE) http://cve.mitre.org/

相关文章
相关标签/搜索