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控制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
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修改密码时,密码加密后在网络传输
经常用这个,但是从没深入研究过,阅读了该节后有了新的认识
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.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)'
);
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;
获得环境变量配置
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型
默认如果监听设置的主机名,将绑定所有的IP地址
设置IP=FIRST的作用就是指绑定该名称返回的第一个地址。
如果本来就指定的IP地址,那么没必要指定IP=FIRST
设置IP=FIRST,对于Loopback地址也不在监听
只对主机名有效,如果设置的为非主机名的IP地址的名称,则其本身就只监听该IP地址
RAC下可以用来在实例都恢复后,关闭本不应该在该节点上的SERVICE(其他实例FAILOVER过来的),使其从新FAILOVER会本身的节点
EXEC dbms_service.disconnect_session('TAF_INST_SVC')
下次重启节点时可以测试下
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-751147/ ,如需转载,请注明出处,否则将追究法律责任。