如何制定Oracle数据库安全加固基线?

来源:前端技术作者:唐振业头衔:网络博主
导读:本期聚焦于唐振业创作的《如何制定Oracle数据库安全加固基线?》,敬请观看详情。Oracle数据库上线后如果沿用默认配置,风险会迅速累积。那些看似不起眼的默认口令、PUBLIC角色过大的权限、监听器未做限制等问题,都可能成为攻击者突破数据库的入口。安全加固基线不是一次性动作,而是需要结合账号口令策略、权限最小化、网络访问控制、审计追踪等多个层面持续落地。本文从实际检查项出发,梳理一套可操作的Oracle安全加固建议,包括修改默认口令与密码过期策略、回收不必要的系统权限和角色、限制监听器远程管理、启用统一审计和细粒度审计、及时应用关键补丁更新等内容。通过这些配置,可以降低数据库被暴力破解、提权利用和内部数据泄露的风险,让数据库安全状态达到可审计、可追溯的基线水平。

在等保测评和日常运维中,Oracle数据库经常因为默认配置未调整而被扣分或者被攻击者利用。没有基线的数据库就像一栋没锁门的房子,再强的应用层防护也可能被绕过。本文从账号口令、权限角色、网络监听、审计日志以及参数补丁几个维度,给出可以直接落地的安全加固建议。

如何制定Oracle数据库安全加固基线?

下面依次说明每个维度的检查点和配置方法。

一、账号与口令策略加固

Oracle安装完成后会默认创建一批账号,例如SYS、SYSTEM、DBSNMP、OUTLN、MDSYS等。很多账号的默认口令在网络上公开,如果不及时修改或锁定,攻击者可以直接用这些口令登录数据库。第一步应该列出所有默认账号和口令状态,将不使用的账号锁定并设置过期。

可以使用下面的SQL查看账号状态:

SELECT username, account_status, profile FROM dba_users ORDER BY username;

对于长期不使用的账号,执行锁定命令。例如锁定scott用户:

ALTER USER scott ACCOUNT LOCK;

同时需要修改默认口令。即使是SYS和SYSTEM,也必须设置强口令。强口令应包含大小写字母、数字和特殊字符,长度不低于12位。可以通过创建密码策略文件来强制所有用户遵循复杂度要求。

创建口令策略Profile并应用到用户:

CREATE PROFILE strong_pwd_profile LIMIT
  FAILED_LOGIN_ATTEMPTS 5
  PASSWORD_LIFE_TIME 90
  PASSWORD_REUSE_TIME 365
  PASSWORD_REUSE_MAX 5
  PASSWORD_GRACE_TIME 7
  PASSWORD_VERIFY_FUNCTION ora12c_verify_function;

ALTER USER app_user PROFILE strong_pwd_profile;

注意PASSWORD_VERIFY_FUNCTION在Oracle 12c及以上版本可以使用ora12c_verify_function或者自定义函数来检查口令复杂度。对于旧版本,需要手动创建验证函数。启用Profile后,新密码必须满足复杂度,否则会报错。这能大幅降低弱口令风险。

除了口令策略,还应该定期检查过期账号和密码即将过期的账号。可以使用如下查询:

SELECT username, expiry_date FROM dba_users WHERE account_status='OPEN';

通过账号锁定、默认口令修改和密码复杂度策略,数据库的基本入口安全得到保障。

二、权限与角色最小化

权限过大是Oracle安全事件的常见根源。很多业务账号为了部署方便直接授予DBA角色,一旦应用被SQL注入,攻击者就能获得数据库的最高权限。因此,权限最小化是加固基线中必须落实的一环。

首先要回收PUBLIC角色上的危险包执行权限。Oracle很多内置包默认授予PUBLIC,例如UTL_FILE、UTL_HTTP、DBMS_LOB、DBMS_SCHEDULER等。这些包可以被普通用户调用,用于读写服务器文件或发起网络请求,存在很大风险。

执行以下命令回收危险权限:

REVOKE EXECUTE ON UTL_FILE FROM PUBLIC;
REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;
REVOKE EXECUTE ON UTL_TCP FROM PUBLIC;
REVOKE EXECUTE ON DBMS_LOB FROM PUBLIC;
REVOKE EXECUTE ON DBMS_SCHEDULER FROM PUBLIC;

回收后,需要将这些权限单独授予确实需要的账号,并限制其使用范围。例如只给数据交换账号授予UTL_FILE的读写权限,并指定目录对象。

然后检查用户拥有的系统权限和角色。使用下面的查询找出拥有DBA角色或高风险权限的用户:

SELECT grantee, granted_role FROM dba_role_privs WHERE granted_role='DBA';
SELECT grantee, privilege FROM dba_sys_privs WHERE privilege IN ('ALTER SYSTEM','CREATE ANY TABLE','DROP ANY TABLE');

对于非管理员账号,坚决回收DBA角色。业务账号只需要连接、增删改查基本权限即可。可以采用角色分层的方式:创建应用角色,只授予必要的对象权限,再将角色授予业务用户。这样即使某个账号泄露,影响面也受到控制。

另外,还要关注用户对数据字典的访问权限。Oracle早期版本中PUBLIC可以查询很多敏感视图,建议关闭O7_DICTIONARY_ACCESSIBILITY参数,并限制用户对DBA_视图的查询权限。

三、网络与监听加固

Oracle监听器是外部访问数据库的必经通道,如果监听器配置不当,攻击者可以通过远程命令修改监听配置、获取数据库实例信息,甚至发起拒绝服务攻击。因此,监听加固是网络层面的关键动作。

首先要限制监听器的远程管理。在listener.ora文件中添加ADMIN_RESTRICTIONS_LISTENER参数并设置为ON,禁止通过lsnrctl远程执行修改命令。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
    )
  )

ADMIN_RESTRICTIONS_LISTENER = ON

其次,启用监听器注册校验,防止恶意实例注册到监听器。在listener.ora中设置VALID_NODE_CHECKING_REGISTRATION_LISTENER为ON,并配置REGISTRATION_INVITED_NODES_LISTENER为允许的节点列表。

VALID_NODE_CHECKING_REGISTRATION_LISTENER = ON
REGISTRATION_INVITED_NODES_LISTENER = 192.168.1.10, 192.168.1.11

对于需要跨网段访问的环境,可以在防火墙层面限制1521端口的来源IP,只允许应用服务器和数据交换服务器连接数据库。如果必须通过公网访问,强烈建议使用Oracle Net Encryption或者TCPS协议,保证传输数据不被窃听。

在sqlnet.ora中启用服务端加密和校验:

SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)

通过以上配置,监听器被远程操控的风险大幅降低,数据在网络传输过程中的安全性也得到提升。

四、审计与日志策略

没有审计的数据库一旦发生数据泄露,很难追溯是谁在什么时间执行了什么操作。审计是安全基线中实现可追溯性的重要手段。Oracle提供统一审计和传统审计两种方式,从12c开始推荐使用统一审计。

启用统一审计之前,需要确认audit_trail参数是否为DB或DB,EXTENDED。可以使用以下命令设置:

ALTER SYSTEM SET audit_trail=DB,EXTENDED SCOPE=SPFILE;

然后重启数据库使参数生效。之后可以创建审计策略,对关键操作进行审计。例如审计所有用户登录失败和DDL语句:

CREATE AUDIT POLICY audit_login_fail
  ACTIONS LOGON;
CREATE AUDIT POLICY audit_ddl
  ACTIONS CREATE TABLE, ALTER TABLE, DROP TABLE;
AUDIT POLICY audit_login_fail WHENEVER NOT SUCCESSFUL;
AUDIT POLICY audit_ddl;

统一审计记录会写入UNIFIED_AUDIT_TRAIL视图,可以定期查询并归档。同时要防止审计表空间被写满导致数据库挂起,建议将审计数据定期导出到外部存储,并监控表空间使用率。

传统审计方式同样有效,例如启用对SYSDBA操作的审计:

AUDIT SYSDBA;
AUDIT SESSION WHENEVER NOT SUCCESSFUL;

无论采用哪种审计方式,都要确保审计日志的保存期限满足合规要求,并对审计日志的访问权限进行限制,防止攻击者删除审计记录。

五、参数与补丁加固

Oracle数据库的一些初始化参数如果保持默认值,会带来安全风险。需要通过修改参数来关闭不必要的功能,减少攻击面。

例如,REMOTE_OS_AUTHENT参数控制操作系统远程认证,默认值可能允许通过操作系统用户身份直接登录数据库,应设置为FALSE。UTL_FILE_DIR参数允许任意目录读写,建议清空或限制到指定目录。

ALTER SYSTEM SET REMOTE_OS_AUTHENT=FALSE SCOPE=SPFILE;
ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY=FALSE SCOPE=SPFILE;
ALTER SYSTEM SET UTL_FILE_DIR='' SCOPE=SPFILE;

另外,禁用不必要的数据库选项和外部过程调用。EXTPROC如果不需要,可以在listener.ora和tnsnames.ora中删除相关配置,避免通过外部过程提权。

补丁管理是基线中不可忽视的部分。Oracle每个季度会发布Critical Patch Update,包含安全漏洞修复。如果数据库长期不打补丁,即使前面的配置都做到位,也可能被已知漏洞利用。建议每季度评估并应用CPU或PSU,同时在测试环境验证后再上生产。

可以使用opatch工具查看已安装补丁:

$ORACLE_HOME/OPatch/opatch lsinventory

还可以使用DBSAT(Oracle Database Security Assessment Tool)定期扫描数据库安全状况,它能够自动发现配置缺陷和漏洞风险,并给出加固建议。将DBSAT检查结果纳入基线核查流程,持续改进安全状态。

Oracle数据库安全加固不是一蹴而就的工作,需要将账号口令、权限最小化、网络控制、审计追踪以及参数补丁等多个层面结合起来,形成可重复执行的基线检查项。每一台新部署的数据库都应该按照基线逐项核对,定期复查变更。只有把安全措施落实到每个环节,才能让数据库在面对内外部威胁时保持足够的防御能力。

Oracle数据库安全加固基线配置权限审计修改时间:2026-09-23 17:34:26

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