ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Secrets of the Oracle Database笔记

Secrets of the Oracle Database笔记

原创 Linux操作系统 作者:westzq1984 时间:2012-12-14 21:49:11 0 删除 编辑
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEAUDIT_SYSLOG_LEVEL参数

9i开始,所有sysdba用户的登录都将在adump下被审计记录。

但存在一个安全隐患,就是审计记录可能被知道oracle用户密码的人清除

那么通过设置audit_syslog_level参数

可以降sysdba用户的审计数据放入系统的日志文件中

 

如LINUX用户:

[root@zhangqiaoc log]# ls -l /u01/app/oracle/admin/o11203/adump

total 0

[root@zhangqiaoc log]# tail -n 10 /var/log/messages

Dec 14 10:12:11 zhangqiaoc syslogd 1.4.1: restart.

Dec 14 10:47:17 zhangqiaoc Oracle Audit[13613]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:47:21 zhangqiaoc Oracle Audit[13618]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:48:03 zhangqiaoc Oracle Audit[13618]: LENGTH : '160' ACTION :[8] 'SHUTDOWN' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:51:31 zhangqiaoc Oracle Audit[13895]: LENGTH : '155' ACTION :[7] 'STARTUP' DATABASE USER:[1] '/' PRIVILEGE :[4] 'NONE' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[13] 'Not Available' STATUS:[1] '0' DBID:[0] ''

Dec 14 10:51:31 zhangqiaoc Oracle Audit[14037]: LENGTH : '148' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[0] ''

Dec 14 10:51:36 zhangqiaoc Oracle Audit[14101]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:51:55 zhangqiaoc Oracle Audit[14149]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:52:22 zhangqiaoc Oracle Audit[14232]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:52:27 zhangqiaoc Oracle Audit[14236]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

 

通过设置audit_sys_operations=true,sysdba用户执行的语句也将记录在OS日志中

Dec 14 10:55:54 zhangqiaoc Oracle Audit[14419]: LENGTH : '424' ACTION :[281] 'SELECT DECODE(null,'','Total System Global Area','') NAME_COL_PLUS_SHOW_SGA,   SUM(VALUE), DECODE (null,'', 'bytes','') units_col_plus_show_sga FROM V$SGA    UNION ALL    SELECT NAME NAME_COL_PLUS_SHOW_SGA , VALUE,    DECODE (null,'', 'bytes','') units_col_plus_show_sga FROM V$SGA' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[0] ''

Dec 14 10:55:59 zhangqiaoc Oracle Audit[14419]: LENGTH : '175' ACTION :[22] 'ALTER DATABASE   MOUNT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:55:59 zhangqiaoc Oracle Audit[14483]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

Dec 14 10:56:01 zhangqiaoc Oracle Audit[14483]: LENGTH : '172' ACTION :[19] 'ALTER DATABASE OPEN' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '3958493542'

 

但是注意,如果是启动数据库,会仍然在adump下审计权限,但是其他动作都是在OS日志中审计

 

如何和audit_trail配合?

只有在设置audit_trail为OS的情况下,才会在OS日志中写入审计数据

但是注意设置为OS是无法和EXTENDED配合使用的,也就是无法捕获到SQL语句

 

另外,将审计数据放入OS日志中,将无法通过一些ORACLE视图来进行查询。

 

EVENT 10027 控制死锁TRC级别

当由于业务造成的死锁无法及时修改程序以修正问题时,可以通过该EVENT控制TRC级别,降低过多的死锁TRC造成的影响。

也可以通过提高死锁TRC的级别,获得更多的诊断死锁的信息

 

ALTER SYSTEM SET EVENTS '10027 trace name context forever, level 1';

EVENT="10027 trace name context forever, level 1"

 

Contents/Level       Default Level 1 Level 2          Level 4

-------------------- ------- ------- ---------------- -------

Cached cursors       yes     no      yes              yes

Call stack trace     no      no      no               yes

Deadlock graph       yes     yes     yes              yes

Process state        yes     no      yes              yes

SQL statements       yes     yes     yes,all sessions yes

Session wait history yes     no      yes,all sessions yes

System state         no      no      yes              no

 

EVENT 10079 dump Oracle Net traffic

Level Purpose

----- ----------------------------------------------

1     Trace network operations to/from client

2     In addition to level 1, dump data

4     Trace network operations to/from database link

8     In addition to level 4, dump data

 

ALTER SESSION SET EVENTS '10079 trace name context forever, level 2';

 

直接dump发出的网络包到TRC文件中。相当于设置sqlnet.ora启动TRC时,在support级别dump下来的包。

 

不过其只能DUMP包,无法跟踪连接信息等

 

注意,在11g下,如果想client跟踪,在指定目录下生成TRC文件,必须在sqlnet.ora中设置DIAG_ADR_ENABLED=off。如果不设置,根本没有任何TRC产生!!!

 

另外,在本节中提到了alter user identified by 和 password修改用户密码一个区别

alter user identified by 修改密码时,密码是通过明文进行网络传输

password修改密码时,密码加密后在网络传输

 

ALTER SESSION SET CURRENT_SCHEMA

经常用这个,但是从没深入研究过,阅读了该节后有了新的认识

1.    Oracle数据库中有两种身份:schema user和privilege user

2.    默认的,这两种身份指定的用户是相同的,但不是必须相同

3.    如通过imp,使用SYSTEM导入业务用户数据时,会话的PARSING_USER_ID为SYSTEM,而PARSING_SCHEMA_ID为业务用户

4.    ALTER SESSION SET CURRENT_SCHEMA 其实就是修改schema user

 

ALTER SESSION SET CURRENT_SCHEMA的限制:

1.    对高级队列对象无效,不能使用ALTER SESSION SET CURRENT_SCHEMA后操作业务用户的高级队列

2.    Rename无效,但是用alter table rename to是可以的

3.    无法使用目标用户的Private db link

 

DBMS_BACKUP_RESTORE 如何连接备份管理软件

在使用dbms_backup_restore.deviceallocate分配通道时通过TYPE和PARAMS参数指定:

v_devtype := DBMS_BACKUP_RESTORE.deviceAllocate(

TYPE => 'SBT_TAPE',

IDENT => 'channel1',

PARAMS => 'ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)'

);

 

DBMS_IJOB导出创建JOB的脚本

 

variable job number

variable submit_call varchar2(4000)

variable instance_call varchar2(4000)

exec :job:=&job_number;

begin

    dbms_ijob.full_export(:job, :submit_call, :instance_call);

end;

/

print submit_call

print instance_call

 

SQL> variable job number

SQL> variable submit_call varchar2(4000)

SQL> variable instance_call varchar2(4000)

SQL> exec :job:=&job_number;

Enter value for job_number: 4001

 

PL/SQL procedure successfully completed.

 

SQL> begin

  2      dbms_ijob.full_export(:job, :submit_call, :instance_call);

  3  end;

  4  /

 

PL/SQL procedure successfully completed.

SQL> print submit_call

SUBMIT_CALL

--------------------------------------------------------------------------------

sys.dbms_ijob.submit(job=>4001,luser=>'SYS',puser=>'APEX_030200',cuser=>'APEX_03

0200',next_date=>to_date('2012-12-14:17:25:43','YYYY-MM-DD:HH24:MI:SS'),interval

=>'sysdate + 8/24',broken=>FALSE,what=>'wwv_flow_cache.purge_sessions(p_purge_se

ss_older_then_hrs => 24);',nlsenv=>'NLS_LANGUAGE=''AMERICAN'' NLS_TERRITORY=''AM

ERICA'' NLS_CURRENCY=''$'' NLS_ISO_CURRENCY=''AMERICA'' NLS_NUMERIC_CHARACTERS='

'.,'' NLS_DATE_FORMAT=''DD-MON-RR'' NLS_DATE_LANGUAGE=''AMERICAN'' NLS_SORT=''BI

NARY''',env=>'0102000202000000');

SQL> print instance_call

 

INSTANCE_CALL

--------------------------------------------------------------------------------

null;

 

DBMS_SYSTEM

获得环境变量配置

SET AUTOPRINT ON

VARIABLE val VARCHAR2(4000)

BEGIN

  dbms_system.get_env('ORACLE_HOME', :val);

END;

/

 

清空V$SESSION_EVENT.MAX_WAIT / V$FILESTAT.MAXIORTM / V$FILESTAT.MAXIOWTM

EXEC DBMS_SYSTEM.KCFRMS;

 

向用户的TRC文件中写入当前时间

EXEC DBMS_SYSTEM.KSDDDT;

 

将缓存中的数据刷到ALERT/TRC中

EXEC DBMS_SYSTEM.KSDFLS;

 

向用户的TRC中写入N个:

EXEC DBMS_SYSTEM.KSDIND(3)

 

向TRC/ALERT写日志

1:TRC 2:ALERT 3:BOTH

EXEC DBMS_SYSTEM.KSDWRT(1, '1111111111')

 

读取EVENT设置

VARIABLE lev number

SET AUTOPRINT ON

EXECUTE sys.dbms_system.read_ev(10046, :lev)

 

为其他会话设置回话级的参数

EXEC dbms_system.set_int_param_in_session(70, 43, 'sort_area_size', 1048576);

EXEC dbms_system.set_bool_param_in_session(12, 16, 'timed_statistics', TRUE);  -- 对大部分参数无效

 

VARIABLE result NUMBER

VARIABLE VALUE NUMBER

VARIABLE dummy VARCHAR2(255)

BEGIN

    :result:=dbms_utility.get_parameter_value(parnam=>'workarea_size_policy',

        intval=>:VALUE, strval=>:dummy);

END;

/

PRINT VALUE

可以读取参数配置。发现参数其实都是用数字表示的

但是通过dbms_system.set_int_param_in_session 是无法设置哪些非数字值的参数,只能设置INT型

 

LISTENER参数IP=FIRST

默认如果监听设置的主机名,将绑定所有的IP地址

设置IP=FIRST的作用就是指绑定该名称返回的第一个地址。

如果本来就指定的IP地址,那么没必要指定IP=FIRST

设置IP=FIRST,对于Loopback地址也不在监听

 

只对主机名有效,如果设置的为非主机名的IP地址的名称,则其本身就只监听该IP地址

 

关闭节点上某个SERVICE的全部SESSION

RAC下可以用来在实例都恢复后,关闭本不应该在该节点上的SERVICE(其他实例FAILOVER过来的),使其从新FAILOVER会本身的节点

EXEC dbms_service.disconnect_session('TAF_INST_SVC')

下次重启节点时可以测试下

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-751147/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    1042158