马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
[20241230]21c HIST_HEAD$ UNIFIED AUDIT.txt
--//看标题有点奇怪,生产系统19c遇到的问题,在我的测试环境21c也存在,就是访问ALL_TAB_COLS,ALL_TAB_COLUMNS视图时会访问
--//HIST_HEAD$表,会触发审计记录相关信息,有点奇怪,做一个记录并分析。
1.环境:
SYS@book01p> @ ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
2.问题提出:
--//首先问题的发现有点偶尔,我查抄生产系统发现sys.aud$存在大量记录,文件已经达到342M。按照道理12c开始使用UNIFIED AUDIT,
--//sys.aud$就算有记录,应该也很少信息。
SYS@book01p> SELECT * FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
PARAMETER VALUE CON_ID
---------------- ----- ------
Unified Auditing FALSE 0
--//难道没有启用吗?但是确实有记录在AUDSYS.AUD$UNIFIED在表中.先不管这个问题.问题先会合在sys.aud$.
--//我看了生产环境与19c的环境一样。
SYS@book01p> select obj$name,count(*) from sys.aud$ group by obj$name ;
OBJ$NAME COUNT(*)
------------------------------ ----------
SCOTT 12
HIST_HEAD$ 79
--//注:我的测试环境使用较少,出现HIST_HEAD$的次数也很少(生产系统大部分都是该信息)。
--//我看了生产系统的AUDSYS.AUD$UNIFIED,我发现出现问题会合在1台机器,应该是开发使用的,program实行的是DBeaver的相关程序。
--//网上检索发现DBeaver,软件简介如下:
--//DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB,
--//Derby, 以及其他兼容 JDBC 的数据库。
--//DBeaver 提供一个图形界面用来查看数据库结构、实行 SQL 查询和脚本,浏览和导出数据,处理 BLOB/CLOB 数据,修改数据库结构
--//等等。
--//使用它大量的涉及ALL_TAB_COLS视图的访问,导致审计记录许多信息。
SYS@book01p> select sql_text ,sql_binds c30 from AUDSYS.AUD$UNIFIED where obj_name='HIST_HEAD$' and rownum=1;
SQL_TEXT C30
------------------------------------------------------------ ------------------------------
SELECT COLUMN_NAME, DATA_TYPE, NUM_DISTINCT, DENSITY, NUM_NU #1(4) EPT #2(5):SCOTT
LLS, NUM_BUCKETS, LAST_ANALYZED, AVG_COL_LEN, RAWTOHEX(LOW_V
ALUE) LOW, RAWTOHEX(HIGH_VALUE) FROM ALL_TAB_COLUMNS WHERE T
ABLE_NAME = :B2 AND OWNER = :B1
--//根本都是类似的语句。也就是如果开发访问ALL_TAB_COLUMNS,ALL_TAB_COLS视图涉及HIST_HEAD$表就会触发审计记录相关信息。
--//在我的测试环境也是类似的环境,例子:
--//在cdb层面查询:
SYS@book> select * from CDB_OBJ_AUDIT_OPTS where object_name='HIST_HEAD$';
no rows selected
--//并没有审计HIST_HEAD$表,为什么出现这样的环境。
SYS@book01p> select * from hist_head$ where rownum=1;
select * from hist_head$ where rownum=1
*
ERROR at line 1:
ORA-01031: insufficient privileges
--//从前遇到类似问题。
SYS@book01p> select obj# from hist_head$ where rownum=1;
OBJ#
----------
4
SYS@book01p> select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate);
SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT
-------------- ------------------- ----------------------------- ---------------------------------------
4039442264 2024-12-30 17:59:14 2024-12-30 09:41:47.801199 select * from hist_head$ where rownum=1
4039442264 2024-12-30 17:59:14 2024-12-30 09:41:58.583453 select * from hist_head$ where rownum=1
--//EVENT_TIMESTAMP记录的UTC时钟。
--//视乎很奇怪该session仅仅记录2次,改写成select count(*) from hist_head$;并没有记录,到这里突然反应过来,实行报错审计才
--//有记录。
--//参考[20240826]奇怪ORA-01031 insufficient privileges报错.txt,当时的测试如下:
select
OBJ#
,COL#
,BUCKET_CNT
,ROW_CNT
,CACHE_CNT
,NULL_CNT
,TIMESTAMP#
,SAMPLE_SIZE
--,MINIMUM
--,MAXIMUM
,DISTCNT
--,LOWVAL
--,HIVAL
,DENSITY
,INTCOL#
,SPARE1
,SPARE2
,AVGCLN
,SPARE3
,SPARE4
,MINIMUM_ENC
,MAXIMUM_ENC
from hist_head$ ;
--//当时的测试确定只要不包括这4个字段,查询不存在问题,涉及MINIMUM,MAXIMUM,LOWVAL,HIVAL就会报错。
SELECT COLUMN_NAME
,DATA_TYPE
,NUM_DISTINCT
,DENSITY
,NUM_NULLS
,NUM_BUCKETS
,LAST_ANALYZED
,AVG_COL_LEN
,RAWTOHEX (LOW_VALUE) LOW
,RAWTOHEX (HIGH_VALUE)
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT';
--//实行成功,输出略。
SELECT COLUMN_NAME,LOW_VALUE from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT';
SYS@book01p> SELECT COLUMN_NAME,LOW_VALUE c30 from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT';
COLUMN_NAME C30
------------------------------ ------------------------------
DEPTNO C10B
DNAME 4143434F554E54494E47
LOC 424F53544F4E
--//实行是成功的,但是现实上在访问hist_head$有问题,显示不出来!!
SELECT COLUMN_NAME from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT'
~~~~~~~~~~
SYS@book01p> select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate)-8/24;
SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT
-------------- ------------------- ----------------------------- ------------------------------------------------------------
4039442264 2024-12-30 18:33:35 2024-12-30 09:41:47.801199 select * from hist_head$ where rownum=1
4039442264 2024-12-30 18:33:35 2024-12-30 09:41:58.583453 select * from hist_head$ where rownum=1
1494506491 2024-12-30 18:33:35 2024-12-30 10:12:37.135743 select * from hist_head$ where rownum=1
1622741797 2024-12-30 18:33:35 2024-12-30 10:23:26.431348 SELECT COLUMN_NAME
,DATA_TYPE
,NUM_DISTINCT
,DENSITY
,NUM_NULLS
,NUM_BUCKETS
,LAST_ANALYZED
,AVG_COL_LEN
,RAWTOHEX (LOW_VALUE) LOW
,RAWTOHEX (HIGH_VALUE)
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT'
4143611800 2024-12-30 18:33:35 2024-12-30 10:33:18.828871 SELECT COLUMN_NAME,LOW_VALUE from ALL_TAB_COLUMNS WHERE TAB
LE_NAME = 'DEPT' AND OWNER = 'SCOTT'
4143611800 2024-12-30 18:33:35 2024-12-30 10:33:31.099445 SELECT COLUMN_NAME,LOW_VALUE c30 from ALL_TAB_COLUMNS WHERE
TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT'
--//下划线的语句没有记录,没有访问涉及的相关4个字段。
--//hist_head$只要涉及MINIMUM,MAXIMUM,LOWVAL,HIVAL4个字段,审计就会有记录。
--//相关视图最终访问的是视图all_tab_cols_v$,该视图存在如下内容:
...
,CASE WHEN SYS_OP_DV_CHECK ( o.name ,o.owner#) = 1 THEN h.lowval ELSE NULL END
,CASE WHEN SYS_OP_DV_CHECK ( o.name ,o.owner#) = 1 THEN h.hival ELSE NULL END
--//继续昨天的测试:
SYS@book01p> select LOW_VALUE,HIGH_VALUE from all_tab_cols_v$ where rownum select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate)-8/24;
SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT
-------------- ------------------- ----------------------------- ------------------------------------------------------------
296253975 2024-12-31 08:48:54 2024-12-31 00:47:56.708845 select LOW_VALUE,HIGH_VALUE from all_tab_cols_v$ where rownum select owner,table_name,COLUMN_NAME,DENSITY from all_tab_cols_v$ where rownum select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate)-8/24;
SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT
-------------- ------------------- ----------------------------- ------------------------------------------------------------
296253975 2024-12-31 08:48:54 2024-12-31 00:47:56.708845 select LOW_VALUE,HIGH_VALUE from all_tab_cols_v$ where rownum select user# from user$ where name='SYS';
USER#
----------
0
--//实行如下:
select
h.obj#
,CASE WHEN SYS_OP_DV_CHECK ( 'TAB$' ,0) = 1 THEN h.obj# else null end n10
--,CASE WHEN SYS_OP_DV_CHECK ( 'TAB$' ,0) = 1 THEN h.lowval ELSE NULL END low
--,CASE WHEN SYS_OP_DV_CHECK ( 'TAB$' ,0) = 1 THEN h.hival ELSE NULL END high
from hist_head$ h where rownum=1;
--//只要打开注解就报ORA-01031: insufficient privileges错,效果不再贴出。
3.小结:
--//总之找到问题的出处,但是不知道如何产生,为什么出现这样的现象。现实上只要19c,21c的版本,查询审计都应该发现我遇到的环境。
--//也就是审计会记录OBJ$NAME=hist_head$的相关信息,除非不访问相关hist_head$的相关视图.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |