0


安全等保加固重命名SYS用户触发ORA-600[kokasgi1]错误案例分享

    欢迎**关注“数据库运维之道”公众号**,一起学习数据库技术! 本期将为大家分享“安全等保加固重命名SYS用户触发ORA-600[kokasgi1]错误”的处置案例。

    关键词:ORA-600[kokasgi1]、10046 trace、gdb

    根据数据库等保要求:应重命名或删除默认账户,修改默认账户的默认口令。 部分安全公司给出了建议:修改sys,system默认账户名称,避免使用常见用户名称。Oracle 11.2.0.2引入了隐含参数_enable_rename_user来开启用户rename功能,此功能可以在restrict模式下重命名普通用户,但无法用于SYS,SYSTEM用户。用户直接强行更新Oracle系统数据字典表USER$来重命名SYS,例如:update user$ set name='SYSIDC' where name='SYS'; 更新成功后,重启数据库会触发ORA-600 [kokasgi1]错误,数据库无法正常启动。

    客户反馈数据库无法启动,提供的错误信息如下图所示:

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [kokasgi1], [], [], [], [], [], [], [], [], [], [], []
Process ID: 4739
Session ID: 1369 Serial number: 3

    首先,遇到ORA-600错误,第一步先查看alert告警日志,以进一步分析报错信息。
SMON: enabling tx recovery
Database Characterset is ZHS16GBK
Errors in file /u01/app/oracle/diag/rdbms/ywzd/ywzd/trace/ywzd_ora_4739.trc  (incident=48167):
ORA-00600: internal error code, arguments: [kokasgi1], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/rdbms/ywzd/ywzd/incident/incdir_48167/ywzd_ora_4739_i48167.trc
ARC3: Archival started
ARC0: STARTING ARCH PROCESSES COMPLETE
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /u01/app/oracle/diag/rdbms/ywzd/ywzd/trace/ywzd_ora_4739.trc:
ORA-00600: internal error code, arguments: [kokasgi1], [], [], [], [], [], [], [], [], [], [], []
Errors in file /u01/app/oracle/diag/rdbms/ywzd/ywzd/trace/ywzd_ora_4739.trc:
ORA-00600: internal error code, arguments: [kokasgi1], [], [], [], [], [], [], [], [], [], [], []
Error 600 happened during db open, shutting down database
USER (ospid: 4739): terminating the instance due to error 600
Instance terminated by USER, pid = 4739
    其次,查阅MOS相关文档。该错误在mos上没有查询出来明确的解决方案。于是,重启数据库并设置10046跟踪事件,让报错信息重现。
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter session set events='10046 trace name context forever , level 12'; 
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [kokasgi1], [], [], [], [], [], [], [], [], [], [], []
Process ID: 4739
Session ID: 1369 Serial number: 3
    接着,在10046 跟踪文件中可以看到启动过程中基础数据字典内容校验时出现了错误,导致数据库无法正常打开。SYS用户在Oracle程序中会被硬编码在逻辑中,强行更改会导致系统异常。
===================== 
select user#,password,datats#,tempts#,type#,defrole,resource$, ptime,decode(defschclass,NULL,'DEFAULT_CONSUMER_GROUP',defschclass),
spare1,spare4,ext_username,spare2 
from user$ where name=:1
END OF STMT
 Bind#0
  value="SYS"   <---绑定变量值
    最后,跟客户进行沟通确认,近期做过安全整改,确实有人修改了SYS用户名。于是排除是被人恶意攻击的情况。

    1、由于SYS用户名被强行更改,接下来需要通过gdb工具挂起启动过程,并强行修改数据字典进行修复,不影响数据库的健康运行。

    2、打开窗口1,将数据库启动至mount状态,关闭监听程序。

    3、打开窗口2 ,查看sqlplus的进程号,并用gdb工具进行调试
[oracle@YWZD-DBS ~]$ ps -ef|grep LOCAL
oracle    6961  6150  0 21:42 ?        00:00:00 oracleywzd (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
[oracle@YWZD-DBS ~]$ gdb /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle 6961
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6_10.3.x86_64 libaio-0.3.107-10.el6.x86_64 numactl-2.0.9-2.el6.x86_64
(gdb) b kokiasg    《---- 设置断点
Breakpoint 1 at 0x15037cc
(gdb) c    《----
Continuing.
    4、此时回到窗口1
SQL> alter database open;
    此时系统挂住,通过alert日志可以看到数据库实际已经open了。

    5、新开一个窗口3,可以查到SYS用户名被改为SYSIDC。
[oracle@YWZD-DBS ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Jul 26 21:45:16 2022

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> select rowid ,name from user$ where name like 'SYS%';

ROWID           NAME
------------------ ------------------------------
AAAAAKAABAAAADRAAB SYSIDC
AAAAAKAABAAAADRAAG SYSTEM

    6、接着将用户名修改为SYS。
SQL> update user$ set name='SYS' where name='SYSIDC';

1 row updated.

SQL> commit;

Commit complete.

    7、回到窗口2,退出断点设置。
Breakpoint 1, 0x00000000015037cc in kokiasg ()
(gdb) quit
A debugging session is active.

    Inferior 1 [process 6961] will be detached.

Quit anyway? (y or n) y
Detaching from program: /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle, process 6961

    8、回到窗口1,重启数据库与监听,并验证业务是否正常。

    9、至此恢复完成。再次明确SYS用户是oracle内部默认的超级用户,系统很多调用在程序中写死的sys,对其用户不能进行重命名操作。

    gdb(GNU Debugger)是Linux系统中一个强大的调试工具,它用于分析程序的运行过程,帮助开发者识别和修复程序中的错误。当数据库已经非常慢或者数据库hang到sqlplus -prelim "/as sysdba"也无法连接时,就可以使用gdb来收集系统的dump信息。尽量不要去使用gdb去dump oracle数据库后台进程,有可能导致进程被kill(遇到过几次),如果系统没有hang死,也尽量不要在生产系统使用gdb做dump和调优。

    可以在测试环境使用gdb进行dump​实验,步骤如下:
1、找到Oracle用户进程ID
ps -ef | grep  orcl (LOCAL=NO)

2、对上述的SPID进程号进行调试跟踪

Example: process id 3846

$ gdb $ORACLE_HOME/bin/oracle 3846
3、打印trace信息

(gdb) print ksudss(258)  --》##258为dump的level

4、找到trace文件  
cd $ORACLE_BASE/diag/rdbms/ywzd/ywzd/trace   ##参数的trace文件路径 也就是alertlog的路径
ll|grep 3846
-rw-r----- 1 oracle oinstall 6723482 Feb 4 15:51 ywzd_ora_3846.trc   ##文件名为  oraclesid_ora_pid.trc
5、退出调试窗口
(gdb) detach   ##脱离进程
(gdb) quit

  1. https://sqlora.blog.csdn.net/article/details/106721292

  2. https://blog.csdn.net/xiaofan23z/article/details/136040441

  3. https://docs.oracle.com/cd/E27071_01/html/E26441/blazn.html

     以上就是本期关于“安全等保加固重命名SYS用户触发ORA-600[kokasgi1]错误”的处置案例。希望能给大家带来帮助。
      欢迎**关注“数据库运维之道”公众号**,一起学习数据库技术!
    
标签: oracle

本文转载自: https://blog.csdn.net/PWY13148/article/details/137064979
版权归原作者 数据库运维之道 所有, 如有侵权,请联系我们删除。

“安全等保加固重命名SYS用户触发ORA-600[kokasgi1]错误案例分享”的评论:

还没有评论