Oracle 数据库安全:11g
     默认审计选项




     by Maclean.liu
           liu.maclean@gmail.com
       www.oracledatabase12g.com
About Me

l Email:liu.maclean@gmail.com
l Blog:www.oracledatabase12g.com
l Oracle Certified Database Administrator Master 10g
and 11g
l Over 6 years experience with Oracle DBA technology
l Over 7 years experience with Linux technology
l Member Independent Oracle Users Group
l Member All China Users Group
l Presents for advanced Oracle topics: RAC,
DataGuard, Performance Tuning and Oracle Internal.
11g 默认启用强大的审计选项,AUDIT_TRAIL 参数的缺省值为 DB,这意为着审计数据将记
录在数据库中的 AUD$审计字典基表上。 Oracle 官方宣称默认启用的审计日志不会对绝大多
数产品数据库的性能带来过大的负面影响,同时 Oracle 公司还推荐使用基于 OS 文件的审计
日志记录 方式(OS audit trail files)。




注意因为在 11g 中 CREATE SESSION 将被作为受审计的权限来被记录,因此当 SYSTEM 表
空间因磁盘空间而无法扩展时将导致这部分审计记录无法生成,这将最终导致普通用户的新
会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用 SYSDBA 身
份的用户创建会话,在将审计数据合适备份后删除一部分记录,或者干 脆 TRUNCATE
AUD$都可以解决上述问题。




当 AUDIT_TRAIL 设置为 OS 时,审计记录文件将在 AUDIT_FILE_DEST 参数所指定的目录
中生成。全部这些文件均可以随时被删除或复制。




注意在默认情况下会以 AUTOEXTEND ON 自动扩展选项创建 SYSTEM 表空间,因此系统
表空间在必要情况下还是会自动增长的,我们所需注意的是磁盘上的剩余空间是否能够满足
其增长需求,以及 数据文件扩展的上限,对于普通的 8k smallfile 表空间而言单个数据文件
的最大尺寸是 32G。


以下权限将对所有用户审计:


SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
www.oracledatabase12g.com
SQL> select privilege,success,failure from dba_priv_audit_opts;

PRIVILEGE                                  SUCCESS      FAILURE
----------------------------------------   ----------   ----------
CREATE EXTERNAL JOB                        BY ACCESS    BY ACCESS
CREATE ANY JOB                             BY ACCESS    BY ACCESS
GRANT ANY OBJECT PRIVILEGE                 BY ACCESS    BY ACCESS
EXEMPT ACCESS POLICY                       BY ACCESS    BY ACCESS
CREATE ANY LIBRARY                         BY ACCESS    BY ACCESS
GRANT ANY PRIVILEGE                        BY ACCESS    BY ACCESS
DROP PROFILE                               BY ACCESS    BY ACCESS
ALTER PROFILE                              BY ACCESS    BY ACCESS
DROP ANY PROCEDURE                         BY ACCESS    BY ACCESS
ALTER ANY PROCEDURE                        BY ACCESS    BY ACCESS
CREATE ANY PROCEDURE                       BY ACCESS    BY ACCESS

PRIVILEGE                                  SUCCESS      FAILURE
----------------------------------------   ----------   ----------
ALTER DATABASE                             BY ACCESS    BY ACCESS
GRANT ANY ROLE                             BY ACCESS    BY ACCESS
CREATE PUBLIC DATABASE LINK                BY ACCESS    BY ACCESS
DROP ANY TABLE                             BY ACCESS    BY ACCESS
ALTER ANY TABLE                            BY ACCESS    BY ACCESS
CREATE ANY TABLE                           BY ACCESS    BY ACCESS
DROP USER                                  BY ACCESS    BY ACCESS
ALTER USER                                 BY ACCESS    BY ACCESS
CREATE USER                                BY ACCESS    BY ACCESS
CREATE SESSION                             BY ACCESS    BY ACCESS
AUDIT SYSTEM                               BY ACCESS    BY ACCESS

PRIVILEGE                                SUCCESS    FAILURE
---------------------------------------- ---------- ----------
ALTER SYSTEM                             BY ACCESS BY ACCESS

23 rows selected.


以下语句也将对所有用户审计:


SQL> select audit_option,success,failure from dba_stmt_audit_opts;

AUDIT_OPTION                               SUCCESS      FAILURE
----------------------------------------   ----------   ----------
ALTER SYSTEM                               BY ACCESS    BY ACCESS
SYSTEM AUDIT                               BY ACCESS    BY ACCESS
CREATE SESSION                             BY ACCESS    BY ACCESS
CREATE USER                                BY ACCESS    BY ACCESS
ALTER USER                                 BY ACCESS    BY ACCESS
DROP USER                                  BY ACCESS    BY ACCESS
PUBLIC SYNONYM                             BY ACCESS    BY ACCESS
DATABASE LINK                              BY ACCESS    BY ACCESS
ROLE                                       BY ACCESS    BY ACCESS
PROFILE                                    BY ACCESS    BY ACCESS
CREATE ANY TABLE                           BY ACCESS    BY ACCESS

AUDIT_OPTION                               SUCCESS      FAILURE
----------------------------------------   ----------   ----------
ALTER ANY TABLE                            BY ACCESS    BY ACCESS
DROP ANY TABLE                             BY ACCESS    BY ACCESS
CREATE PUBLIC DATABASE LINK                BY ACCESS    BY ACCESS
GRANT ANY ROLE                             BY ACCESS    BY ACCESS
SYSTEM GRANT                               BY ACCESS    BY ACCESS
ALTER DATABASE                             BY   ACCESS   BY   ACCESS
CREATE ANY PROCEDURE                       BY   ACCESS   BY   ACCESS
ALTER ANY PROCEDURE                        BY   ACCESS   BY   ACCESS
DROP ANY PROCEDURE                         BY   ACCESS   BY   ACCESS
ALTER PROFILE                              BY   ACCESS   BY   ACCESS
DROP PROFILE                               BY   ACCESS   BY   ACCESS

AUDIT_OPTION                               SUCCESS       FAILURE
----------------------------------------   ----------    ----------
GRANT ANY PRIVILEGE                        BY ACCESS     BY ACCESS
CREATE ANY LIBRARY                         BY ACCESS     BY ACCESS
EXEMPT ACCESS POLICY                       BY ACCESS     BY ACCESS
GRANT ANY OBJECT PRIVILEGE                 BY ACCESS     BY ACCESS
CREATE ANY JOB                             BY ACCESS     BY ACCESS
CREATE EXTERNAL JOB                        BY ACCESS     BY ACCESS

28 rows selected.


当前数据库中的现有的审计记录:


SQL> select action_name,count(*) from dba_audit_trail group by action_name;

ACTION_NAME                    COUNT(*)
---------------------------- ----------
LOGOFF BY CLEANUP                    40
LOGON                               460
LOGOFF                              377
ALTER USER                            2
SYSTEM GRANT                         12
ALTER SYSTEM                         10
CREATE PUBLIC SYNONYM                 5
ALTER DATABASE                        2
CREATE DATABASE LINK                  1
DROP PUBLIC SYNONYM                   5

10 rows selected.




在 11g 中默认启用了对登录注销操作 LOGON/LOGOFF 的审计,详见<11g 默认审计选项>。
利用这一点我们可以很方便地从审计日志中找出数据库中的密码暴力破解者。如以下演示:




C:UsersMaclean Liu>sqlplus system/try_password@G11R2

SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 4 21:37:44 2011

Copyright (c) 1982, 2010, Oracle.   All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

select username,userhost,terminal,timestamp,action_name,os_process
 from dba_audit_trail
where returncode = 1017
order by timestamp desc;




USERNAME              USERHOST                                TERMINAL
TIMESTAMP          ACTION_NAME        OS_PROCESS
-------------------- ----------------------------------------
-------------------- ------------------ ---------------- ------------
SYSTEM                WORKGROUPMACLEANLIU-PC                 MACLEANLIU-PC 04-
JUL-11          LOGON              4240:2700




Script:
set   linesize 140 pagesize 1400
col   os_username for a30
col   userhost for a30
col   terminal for a30

select os_username,userhost,terminal,username,count(*)
 from dba_audit_trail
 where returncode = 1017
 group by os_username,userhost,username,terminal
 having count(*)>10
 /




注意对于 LOGON PER SECOND 很高的数据库,如果应用程序配置文件中的数据库用户密
码不正确,同时应用在短期内发起大量会话登录数据库的话可能引发频繁的 dc_users 字典缓
存锁,用户登录无法成功,乃至整个实例 hang 住,该问题具体可见<Row Cache lock
Problem>。针对该问题如果是在 11g 中的话,可以利用以上脚本快速找到因密码不正确登录
失败的数据库用户名,从而减少排查时间。




© 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,
否则追求法律责任.

Oracle数据库安全:11g默认审计选项

  • 1.
    Oracle 数据库安全:11g 默认审计选项 by Maclean.liu liu.maclean@gmail.com www.oracledatabase12g.com
  • 2.
    About Me l Email:liu.maclean@gmail.com lBlog:www.oracledatabase12g.com l Oracle Certified Database Administrator Master 10g and 11g l Over 6 years experience with Oracle DBA technology l Over 7 years experience with Linux technology l Member Independent Oracle Users Group l Member All China Users Group l Presents for advanced Oracle topics: RAC, DataGuard, Performance Tuning and Oracle Internal.
  • 3.
    11g 默认启用强大的审计选项,AUDIT_TRAIL 参数的缺省值为DB,这意为着审计数据将记 录在数据库中的 AUD$审计字典基表上。 Oracle 官方宣称默认启用的审计日志不会对绝大多 数产品数据库的性能带来过大的负面影响,同时 Oracle 公司还推荐使用基于 OS 文件的审计 日志记录 方式(OS audit trail files)。 注意因为在 11g 中 CREATE SESSION 将被作为受审计的权限来被记录,因此当 SYSTEM 表 空间因磁盘空间而无法扩展时将导致这部分审计记录无法生成,这将最终导致普通用户的新 会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用 SYSDBA 身 份的用户创建会话,在将审计数据合适备份后删除一部分记录,或者干 脆 TRUNCATE AUD$都可以解决上述问题。 当 AUDIT_TRAIL 设置为 OS 时,审计记录文件将在 AUDIT_FILE_DEST 参数所指定的目录 中生成。全部这些文件均可以随时被删除或复制。 注意在默认情况下会以 AUTOEXTEND ON 自动扩展选项创建 SYSTEM 表空间,因此系统 表空间在必要情况下还是会自动增长的,我们所需注意的是磁盘上的剩余空间是否能够满足 其增长需求,以及 数据文件扩展的上限,对于普通的 8k smallfile 表空间而言单个数据文件 的最大尺寸是 32G。 以下权限将对所有用户审计: SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production PL/SQL Release 11.2.0.2.0 - Production CORE 11.2.0.2.0 Production TNS for Linux: Version 11.2.0.2.0 - Production NLSRTL Version 11.2.0.2.0 - Production SQL> select * from global_name; GLOBAL_NAME -------------------------------------------------------------------------------- www.oracledatabase12g.com
  • 4.
    SQL> select privilege,success,failurefrom dba_priv_audit_opts; PRIVILEGE SUCCESS FAILURE ---------------------------------------- ---------- ---------- CREATE EXTERNAL JOB BY ACCESS BY ACCESS CREATE ANY JOB BY ACCESS BY ACCESS GRANT ANY OBJECT PRIVILEGE BY ACCESS BY ACCESS EXEMPT ACCESS POLICY BY ACCESS BY ACCESS CREATE ANY LIBRARY BY ACCESS BY ACCESS GRANT ANY PRIVILEGE BY ACCESS BY ACCESS DROP PROFILE BY ACCESS BY ACCESS ALTER PROFILE BY ACCESS BY ACCESS DROP ANY PROCEDURE BY ACCESS BY ACCESS ALTER ANY PROCEDURE BY ACCESS BY ACCESS CREATE ANY PROCEDURE BY ACCESS BY ACCESS PRIVILEGE SUCCESS FAILURE ---------------------------------------- ---------- ---------- ALTER DATABASE BY ACCESS BY ACCESS GRANT ANY ROLE BY ACCESS BY ACCESS CREATE PUBLIC DATABASE LINK BY ACCESS BY ACCESS DROP ANY TABLE BY ACCESS BY ACCESS ALTER ANY TABLE BY ACCESS BY ACCESS CREATE ANY TABLE BY ACCESS BY ACCESS DROP USER BY ACCESS BY ACCESS ALTER USER BY ACCESS BY ACCESS CREATE USER BY ACCESS BY ACCESS CREATE SESSION BY ACCESS BY ACCESS AUDIT SYSTEM BY ACCESS BY ACCESS PRIVILEGE SUCCESS FAILURE ---------------------------------------- ---------- ---------- ALTER SYSTEM BY ACCESS BY ACCESS 23 rows selected. 以下语句也将对所有用户审计: SQL> select audit_option,success,failure from dba_stmt_audit_opts; AUDIT_OPTION SUCCESS FAILURE ---------------------------------------- ---------- ---------- ALTER SYSTEM BY ACCESS BY ACCESS SYSTEM AUDIT BY ACCESS BY ACCESS CREATE SESSION BY ACCESS BY ACCESS CREATE USER BY ACCESS BY ACCESS ALTER USER BY ACCESS BY ACCESS DROP USER BY ACCESS BY ACCESS PUBLIC SYNONYM BY ACCESS BY ACCESS DATABASE LINK BY ACCESS BY ACCESS ROLE BY ACCESS BY ACCESS PROFILE BY ACCESS BY ACCESS CREATE ANY TABLE BY ACCESS BY ACCESS AUDIT_OPTION SUCCESS FAILURE ---------------------------------------- ---------- ---------- ALTER ANY TABLE BY ACCESS BY ACCESS DROP ANY TABLE BY ACCESS BY ACCESS CREATE PUBLIC DATABASE LINK BY ACCESS BY ACCESS GRANT ANY ROLE BY ACCESS BY ACCESS SYSTEM GRANT BY ACCESS BY ACCESS
  • 5.
    ALTER DATABASE BY ACCESS BY ACCESS CREATE ANY PROCEDURE BY ACCESS BY ACCESS ALTER ANY PROCEDURE BY ACCESS BY ACCESS DROP ANY PROCEDURE BY ACCESS BY ACCESS ALTER PROFILE BY ACCESS BY ACCESS DROP PROFILE BY ACCESS BY ACCESS AUDIT_OPTION SUCCESS FAILURE ---------------------------------------- ---------- ---------- GRANT ANY PRIVILEGE BY ACCESS BY ACCESS CREATE ANY LIBRARY BY ACCESS BY ACCESS EXEMPT ACCESS POLICY BY ACCESS BY ACCESS GRANT ANY OBJECT PRIVILEGE BY ACCESS BY ACCESS CREATE ANY JOB BY ACCESS BY ACCESS CREATE EXTERNAL JOB BY ACCESS BY ACCESS 28 rows selected. 当前数据库中的现有的审计记录: SQL> select action_name,count(*) from dba_audit_trail group by action_name; ACTION_NAME COUNT(*) ---------------------------- ---------- LOGOFF BY CLEANUP 40 LOGON 460 LOGOFF 377 ALTER USER 2 SYSTEM GRANT 12 ALTER SYSTEM 10 CREATE PUBLIC SYNONYM 5 ALTER DATABASE 2 CREATE DATABASE LINK 1 DROP PUBLIC SYNONYM 5 10 rows selected. 在 11g 中默认启用了对登录注销操作 LOGON/LOGOFF 的审计,详见<11g 默认审计选项>。 利用这一点我们可以很方便地从审计日志中找出数据库中的密码暴力破解者。如以下演示: C:UsersMaclean Liu>sqlplus system/try_password@G11R2 SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 4 21:37:44 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied select username,userhost,terminal,timestamp,action_name,os_process from dba_audit_trail
  • 6.
    where returncode =1017 order by timestamp desc; USERNAME USERHOST TERMINAL TIMESTAMP ACTION_NAME OS_PROCESS -------------------- ---------------------------------------- -------------------- ------------------ ---------------- ------------ SYSTEM WORKGROUPMACLEANLIU-PC MACLEANLIU-PC 04- JUL-11 LOGON 4240:2700 Script: set linesize 140 pagesize 1400 col os_username for a30 col userhost for a30 col terminal for a30 select os_username,userhost,terminal,username,count(*) from dba_audit_trail where returncode = 1017 group by os_username,userhost,username,terminal having count(*)>10 / 注意对于 LOGON PER SECOND 很高的数据库,如果应用程序配置文件中的数据库用户密 码不正确,同时应用在短期内发起大量会话登录数据库的话可能引发频繁的 dc_users 字典缓 存锁,用户登录无法成功,乃至整个实例 hang 住,该问题具体可见<Row Cache lock Problem>。针对该问题如果是在 11g 中的话,可以利用以上脚本快速找到因密码不正确登录 失败的数据库用户名,从而减少排查时间。 © 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址, 否则追求法律责任.