导读:本期聚焦于小雨创作的《Oracle数据库中SYSTEM和SYS账户应该如何正确保护?》,敬请观看详情。SYS与SYSTEM账户一旦被攻破,整个Oracle数据库实例将面临完全失控的风险。不少运维人员习惯给这两个账户设置弱口令,甚至长期开启远程登录,这给内部渗透提供了捷径。从权限模型看,SYS拥有数据字典基表操作权,SYSTEM则具备多数管理包执行权限。正确做法包括禁用默认口令、限制IP白名单、开启审计策略、分离日常运维账号。本文梳理了从网络层到字典层的防护要点,并给出可直接落地的参数配置与监控脚本思路,帮助DBA构建最小权限体系,降低核心账号泄露带来的毁灭性后果。

在Oracle数据库的安全体系中,SYS和SYSTEM是两个最具重量的内置账户。SYS是数据库字典的拥有者,能够启动和关闭实例,修改数据字典基表;SYSTEM则用于存放数据字典视图和管理工具包,拥有极高的管理权限。一旦这两个账户被非法控制,攻击者可以读取全部业务数据、篡改审计记录甚至破坏实例本身。因此,对它们的保护不能只停留在修改密码这一步,而需要从网络、认证、权限、审计多个层面建立纵深防御。

Oracle数据库中SYSTEM和SYS账户应该如何正确保护?

网络层与连接控制层面的隔离

最基础也最容易被忽视的保护手段,是限制SYS和SYSTEM能够从哪些位置发起连接。Oracle默认允许通过监听器从远程连接数据库,如果监听器没有配置访问控制,攻击者可以从任意IP尝试暴破。DBA应当修改sqlnet.ora文件,使用TCP.VALIDNODE_CHECKINGTCP.INVITED_NODES参数限定可连入的服务器或运维机地址,将核心账户的可达范围压缩到最小。

另一个关键点是禁止SYS账户通过监听器远程登录。在listener.ora中设置ENVS=...并配合REMOTE_LOGIN_PASSWORDFILE参数,将其设为EXCLUSIVE但仅限本地操作系统认证,可避免密码文件被网络侧利用。同时,建议为SYS开启CONNECT / AS SYSDBA的操作系统级认证,并严格限制具有OSDBA组的操作系统用户数量,防止服务器被登录后直接提权到SYS。

对于SYSTEM账户,虽然通常不承担启动实例的职责,但因其具备执行DBMS_系列管理包的能力,同样不应开放给广域网络。可通过数据库防火墙或VPD(虚拟私有数据库)策略,在中间层拦截对SYSTEM的非常规来源会话。以下示例展示了如何通过sqlnet.ora限制节点:

# sqlnet.ora 片段
TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES = (192.168.0.1, 127.0.0.1)
TCP.EXCLUDED_NODES = (0.0.0.0, 10.0.0.0/8)

认证加固与口令生命周期管理

Oracle提供了密码文件(password file)机制来存储SYSDBA和SYSOPER权限账户的凭证。很多老系统使用的是默认口令如change_on_installmanager,这是极具风险的。DBA应使用orapwd工具重建密码文件,指定强复杂度口令,并设置IGNORECASEN以强制区分大小写。对于SYSTEM,应通过ALTER USER语句设置密码过期策略和失败锁定次数。

从Oracle 12c开始,统一审计(Unified Auditing)可以捕获所有对SYS和SYSTEM的认证尝试。建议开启AUDIT SYS操作,并将审计数据写入独立的表空间,防止被普通DBA删除。此外,可以创建登录触发器,当SYS或SYSTEM在非维护窗口从陌生IP登录时,自动中断会话并告警。下面的代码演示了如何用触发器限制SYSTEM的登录时间:

CREATE OR REPLACE TRIGGER restrict_system_login
AFTER LOGON ON DATABASE
DECLARE
  v_user VARCHAR2(30);
BEGIN
  SELECT SYS_CONTEXT('USERENV','SESSION_USER') INTO v_user FROM dual;
  IF v_user = 'SYSTEM' THEN
    IF TO_CHAR(SYSDATE,'HH24') NOT BETWEEN '09' AND '18' THEN
      RAISE_APPLICATION_ERROR(-20001,'SYSTEM登录仅允许工作时间');
    END IF;
  END IF;
END;
/

口令之外,还应定期核查DBA_USERS视图中两个账户的ACCOUNT_STATUSLAST_LOGIN字段。如果发现SYS被异常锁定或SYSTEM有长期未改密记录,说明内部流程存在漏洞。可结合企业密钥管理系统,将Oracle账户口令作为机密资产轮换,避免人工设置弱密码。

权限回收与日常运维账号分离

许多团队图方便,直接拿SYSTEM账号跑备份脚本、建表或部署应用。这种做法模糊了管理账户与业务账户的边界。正确方案是创建专用的运维账户,仅授予必要的EXP_FULL_DATABASEIMP_FULL_DATABASE角色,而让SYSTEM退居二线。SYS更不应出现在任何应用程序的连接串中。

在权限回收时,可利用REVOKE命令去掉SYSTEM不必要的角色,例如某些第三方工具安装时自动附加的DBA角色可降级为RESOURCECONNECT组合。对于SYS,由于其权限来自字典本身,不能简单回收,只能通过操作系统加固和审计来约束。下表对比了两类账户在分离策略下的使用建议:

账户允许场景禁止场景
SYS实例恢复、字典修复、升级业务连接、定时任务、远程开发
SYSTEM空间扩容、用户创建、监控配置应用读写、报表查询、外网访问

最后,建议开启Oracle的DBMS_PRIVILEGE_CAPTURE功能,捕获实际使用中未被调用的系统权限,并生成回收报告。通过持续梳理,可以让SYSTEM和SYS的权限始终保持在必需的最小范围,即使凭证意外泄露,攻击者能造成的破坏也受限。保护核心账户不是一次配置,而是贯穿数据库生命周期的日常纪律。

OracleSYSTEM账户SYS账户修改时间:2026-08-17 22:10:20

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。