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

网络层与连接控制层面的隔离
最基础也最容易被忽视的保护手段,是限制SYS和SYSTEM能够从哪些位置发起连接。Oracle默认允许通过监听器从远程连接数据库,如果监听器没有配置访问控制,攻击者可以从任意IP尝试暴破。DBA应当修改sqlnet.ora文件,使用TCP.VALIDNODE_CHECKING和TCP.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_install和manager,这是极具风险的。DBA应使用orapwd工具重建密码文件,指定强复杂度口令,并设置IGNORECASE为N以强制区分大小写。对于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_STATUS和LAST_LOGIN字段。如果发现SYS被异常锁定或SYSTEM有长期未改密记录,说明内部流程存在漏洞。可结合企业密钥管理系统,将Oracle账户口令作为机密资产轮换,避免人工设置弱密码。
权限回收与日常运维账号分离
许多团队图方便,直接拿SYSTEM账号跑备份脚本、建表或部署应用。这种做法模糊了管理账户与业务账户的边界。正确方案是创建专用的运维账户,仅授予必要的EXP_FULL_DATABASE或IMP_FULL_DATABASE角色,而让SYSTEM退居二线。SYS更不应出现在任何应用程序的连接串中。
在权限回收时,可利用REVOKE命令去掉SYSTEM不必要的角色,例如某些第三方工具安装时自动附加的DBA角色可降级为RESOURCE与CONNECT组合。对于SYS,由于其权限来自字典本身,不能简单回收,只能通过操作系统加固和审计来约束。下表对比了两类账户在分离策略下的使用建议:
| 账户 | 允许场景 | 禁止场景 |
|---|---|---|
| SYS | 实例恢复、字典修复、升级 | 业务连接、定时任务、远程开发 |
| SYSTEM | 空间扩容、用户创建、监控配置 | 应用读写、报表查询、外网访问 |
最后,建议开启Oracle的DBMS_PRIVILEGE_CAPTURE功能,捕获实际使用中未被调用的系统权限,并生成回收报告。通过持续梳理,可以让SYSTEM和SYS的权限始终保持在必需的最小范围,即使凭证意外泄露,攻击者能造成的破坏也受限。保护核心账户不是一次配置,而是贯穿数据库生命周期的日常纪律。