网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

Oracle数据库安全措施


发布日期:2019年08月19日
 
Oracle数据库安全措施

说明以下措施只是加强oracle访问上的安全防止非法用户通过oracle中的漏洞进行非法连接对数据库中的数据进行非法操作造成数据库损害

数据库安全原则

.只安装oracle必须的组件

.锁定并终止默认用户帐号

.改变默认用户密码

.激活数据字典保护(oraclei默认具有此功能)

.根据实际情况给予最少的权限

.强制进行有效的访问控制(oraclei默认具有此功能)

.限制操作系统访问

.限制网络访问

.安装所有的安全补丁

具体安全加强措施 .对默认用户进行锁定

在oracle安装过程中默认安装会有很多的默认用户造成安全潜在问题可以将其锁定限制对数据库进行连接

Oracle范例用户HROEPMSHQS_ADMQSQS_WSQS_ESQS_OSQS_CBADMQS_CBQS_CS

只是用于oracle的范例没有实际用处

DBSNMP负责运行Oracle系统的智能代理(Intelligent Agent)实际中很少使用几乎不使用

OUTLN用于存储Outlines不使用时可锁定使用时再打开

MDSYS ORDSYS CTXSYS ORDPLUGINS用于支持oracle的Intermedia默认锁定

WMSYS用于存储Oracle Workspace Manager的元数据信息默认锁定

ANONYMOUS用于允许HTTP 访问Oracle XML DB

XDB用于存储Oracle XML DB数据和元数据

此外还有一些系统自带的用户不再列举建议对除syssystemrmanperfstat以外的系统自带用户进行锁定减少安全隐患

Sqlselect usernameaccount_status from dba_users;

alter user username account lock; .安装最新的安全补丁

安全公告和补丁位置如下

.密码管理机制

在Oracle我们可以通过修改用户概要文件来设置密码的安全策略可以自定义密码的复杂度在概要文件中有以下参数是和密码安全有关系的

FAILED_LOGIN_ATTEMPTS最大错误登录次数

PASSWORD_GRACE_TIME口令失效后锁定时间

PASSWORD_LIFE_TIME口令有效时间

PASSWORD_LOCK_TIME登录超过有效次数锁定时间

PASSWORD_REUSE_MAX口令历史记录保留次数

PASSWORD_REUSE_TIME口令历史记录保留时间

PASSWORD_VERIFY_FUNCTION口令复杂度审计函数

缺省这个安全策略是没有启用的

启用安全策略

以sys用户执行SQL> @?/rdbms/admin/utlpwdmgsql

设置举例

CREATE PROFILE app_user LIMIT

FAILED_LOGIN_ATTEMPTS

PASSWORD_LIFE_TIME

PASSWORD_REUSE_TIME

PASSWORD_REUSE_MAX UNLIMITED

PASSWORD_VERIFY_FUNCTION verify_function

PASSWORD_LOCK_TIME /

PASSWORD_GRACE_TIME ;

.资源管理机制

启用资源管理

SQL> alter system set resource_limit=true;

设置举例

CREATE PROFILE app_user LIMIT

SESSIONS_PER_USER UNLIMITED

CPU_PER_SESSION UNLIMITED

CPU_PER_CALL

CONNECT_TIME

LOGICAL_READS_PER_SESSION DEFAULT

LOGICAL_READS_PER_CALL

PRIVATE_SGA K

COMPOSITE_LIMIT ;

指定profile可以使用create user 或者alter user举例如下

CREATE USER test

IDENTIFIED BY aZbC

DEFAULT TABLESPACE data_ts

QUOTA M ON test_ts

QUOTA K ON data_ts

TEMPORARY TABLESPACE temp_ts

PROFILE profile_name;

ALTER USER test

IDENTIFIED BY ABDD

DEFAULT TABLESPACE data_ts

TEMPORARY TABLESPACE temp_ts

QUOTA M ON data_ts

QUOTA ON test_ts

PROFILE profile_name;

权限管理

根据实际情况细分权限建立角色对于系统权限慎重给予采用最小授权原则给用户尽量少的权限

用户组PUBLIC顾名思义表示数据库中的每一位用户因此对PUBLIC 用户组授予权限其实也就是对数据库中的每一位用户都授予了相应的权限这是在授予或撤销权限时非常有用的一条捷径但也可能带来巨大的安全隐患尤其是在试图确保以最少权限的方式运行数据库时更是如此

撤销Public 组的一些不必要权限严格限制以下程序包的权限

UTL_FILE:该程序包允许oralce 用户读取服务器上的文件如果设置错误的话可能可以得到任何文件

UTL_HTTP该程序包允许oracle 用户通过HTTP 访问外部资源包括恶意的web 代码和文件

UTL_TCP: 该程序包允许oracle 通过TCP 建立连接从而从网络上得到可执行文件

UTL_SMTP: 该程序包允许oracle 通过SMTP 方式进行通信从而转发关键文件

撤销以上包的执行权限

Sql

revoke EXECUTE on UTL_FILE from public;

revoke EXECUTE on UTL_TCP from public;

revoke EXECUTE on UTL_SMTP from public;

revoke EXECUTE on UTL_HTTP from public; .修改认证方式

Oracle默认使用操作系统认证只要能进入系统可直接以sys进入oracle存在较大安全隐患可修改为数据库认证方式

在$ORACLE_HOME/network/admin中打开sqlnetora将SQLNETAUTHENTICATION_SERVICES= (NTS)注释掉在前面加#即可 .限制IP连接

由于Oracle 的TNS 监听器有许多安全漏洞其中的一些漏洞甚至能让入侵者得到操作系统的超级用户权限或者修改数据库中的数据因此在打好补丁的同时对连接IP 的限制也能做到防患于未然

在$ORACLE_HOME\network\admin 目录下修改SQLNETORA文件

增加如下内容

tcpvalidnode_checking = YES

tcpinvited_nodes = (IP地址 hostname)

IP地址和hostname是允许连接的主机的名字和IP地址 .关掉Extproc 功能

由于extproc 存在安全问题允许用户不进行身份认证就可以调用系统函数因此如果不需要该功能必须关闭

修改TNSNAMESORA 和LISTENERORA 文件删除含有EXTPROC的条目使两个文件中只含有使用的有效连接信息 .启动审计功能

Oracle的审计机制是用来监视用户对ORACLE数据库所做的各种操作在缺省情况下系统的审计功能是关闭的可以在INITORA参数文件中设置参数AUDIT_TRAIL来激活它的值有NONE 禁止审计DB 启用审计写入SYSAUD$OS 启用审计写入操作系统

当AUDIT_TRAIL=OS可设置AUDIT_FILE_DEST指定审计文件的位置默认情况在$ORACLE_HOME/rdbms/audit下面

AUDIT_SYS_OPERATIONS AUDIT_TRAIL AUDIT_FILE_DEST都是静态参数需修改参数文件重启后生效

设置审计水平

Statement指定对影响数据库对象的一个特定类型的特定SQL语句进行审计比如对表的audit table有以下语句CREATE TABLE TRUNCATE TABLE COMMENT ON TABLE and DELETE [FROM] TABLE等

Privilege对由指定系统权限授权的SQL语句进行审计比如AUDIT CREATE ANY TRIGGER是对由CREATE ANY TRIGGER系统权限授权的语句进行审计

Object对特定对象上的特定操作进行审计比如ALTER TABLE on the emp

设置审计条件

BY SESSION/BY ACCESSBY SESSION使oracle在同一session中的同一类型的SQL语句只写一条记录BY ACCESS使oracle对每次访问写一条记录

WHENEVER SUCCESSFUL/WHENEVER NOT SUCCESSFULWHENEVER SUCCESSFU只审计那些成功执行的SQL语句WHENEVER NOT SUCCESSFUL只审计那些失败或结果错误的SQL语句

审计操作举例

审计连接

AUDIT SESSION; AUDIT SESSION BY scott lori;

审计指定权限

AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;

AUDIT DELETE ANY TABLE;

AUDIT SELECT TABLE INSERT TABLE DELETE TABLE EXECUTE PROCEDURE BY ACCESS WHENEVER NOT SUCCESSFUL;

审计指定对象

AUDIT DELETE ON scottemp;

AUDIT SELECT INSERT DELETE ON jwarddept BY ACCESS WHENEVER SUCCESSFUL;

AUDIT SELECT ON DEFAULT WHENEVER NOT SUCCESSFUL;

关闭审计操作

关闭上面例子中的相应审计

NOAUDIT session;

NOAUDIT session BY scott lori;

NOAUDIT DELETE ANY TABLE;

NOAUDIT SELECT TABLE INSERT TABLE DELETE TABLEEXECUTE PROCEDURE;

关闭所有语句审计

NOAUDIT ALL;

关闭所有权限审计

NOAUDIT ALL PRIVILEGES;

关闭对象审计

NOAUDIT DELETE ON emp;

NOAUDIT SELECT INSERT DELETE ON jwarddept;

关闭某一对象上的所有审计

NOAUDIT ALL ON emp;

关闭所有的默认对象审计

NOAUDIT ALL ON DEFAULT;

相关审计信息视图

ALL_DEF_AUDIT_OPTS

USER_OBJ_AUDIT_OPTS

DBA_OBJ_AUDIT_OPTS

DBA_STMT_AUDIT_OPTS

DBA_PRIV_AUDIT_OPTS

DBA_AUDIT_TRAIL

USER_AUDIT_TRAIL

DBA_AUDIT_SESSION

USER_AUDIT_SESSION

DBA_AUDIT_STATEMENT

USER_AUDIT_STATEMENT

DBA_AUDIT_OBJECT

USER_AUDIT_OBJECT

DBA_AUDIT_EXISTS

SM$AUDIT_CONFIG

KU$_AUDIT_VIEW

KU$_AUDIT_OBJ_BASE_VIEW

KU$_AUDIT_OBJ_VIEW

DBA_AUDIT_POLICIES

ALL_AUDIT_POLICIES

USER_AUDIT_POLICIES

DBA_FGA_AUDIT_TRAIL

DBA_REPAUDIT_ATTRIBUTE

ALL_REPAUDIT_ATTRIBUTE

USER_REPAUDIT_ATTRIBUTE

DBA_REPAUDIT_COLUMN

ALL_REPAUDIT_COLUMN

USER_REPAUDIT_COLUMN

查看审计信息举例

列出活动的语句审计操作

SELECT * FROM DBA_STMT_AUDIT_OPTS;

列出活动的权限审计操作

SELECT * FROM DBA_PRIV_AUDIT_OPTS;

列出对指定对象的活动对象审计操作

SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER = SCOTT AND OBJECT_NAME LIKE EMP%;

列出默认的对象审计操作

SELECT * FROM ALL_DEF_AUDIT_OPTS;

列出审计记录

SELECT * FROM DBA_AUDIT_OBJECT;

列出对于AUDIT SESSION审计操作的审计记录

SELECT USERNAME LOGOFF_TIME LOGOFF_LREAD LOGOFF_PREAD LOGOFF_LWRITE LOGOFF_DLOCK FROM DBA_AUDIT_SESSION;

详细信息请查看联机文档及相关资料

               

上一篇:Oracle数据库的安全策略

下一篇:如何消除Oracle数据库的安全隐患