说明以下措施只是加强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;
详细信息请查看联机文档及相关资料