Ubuntu 上 Oracle 数据库的安全设置清单
一 系统与服务加固
- 专用系统与账户:仅使用专用的 oracle 用户和 oinstall/dba 组;禁止 root 直连数据库;为 oracle 设置强口令与 sudo 限制(仅允许必要命令)。
- 文件系统权限:限制 $ORACLE_HOME、$ORACLE_BASE、数据文件目录 仅 oracle:oinstall 可访问,关键目录权限 0755/0644,避免其他用户读/写/执行。
- 补丁与更新:及时安装 Ubuntu 安全更新 与 Oracle Critical Patch Update(CPU),最小化暴露窗口。
- 服务最小化:仅开放必要端口(默认 1521/TCP),禁用未使用的监听器与数据库服务;监听仅绑定内网地址。
- 自启动与守护:使用 /etc/oratab 与 systemd 管理实例启停,确保异常重启后可自动拉起且权限正确。
二 网络与传输安全
- 防火墙与网络隔离:在 UFW/iptables 仅放行应用服务器与跳板机到 1521/TCP;数据库置于 私有子网/VPC,禁止公网直连。
- 监听器加固:为 LISTENER 设置强密码并保存配置(在 lsnrctl 中执行 change_password 与 save_config),防止未授权启停与配置篡改。
- 源地址限制:在 $ORACLE_HOME/network/admin/sqlnet.ora 启用白名单校验,仅允许可信网段/主机访问。
- 传输加密:启用 SQLNET.ENCRYPTION/SQLNET.CRYPTO_CHECKSUM,强制客户端/服务器协商加密与校验,防止明文传输。
- 空闲连接保活:设置 SQLNET.EXPIRE_TIME=10(单位:分钟),及时清理僵死会话,降低会话劫持风险。
三 数据库账户与权限控制
- 强密码策略:口令长度至少 8 位,包含大小写字母、数字与特殊字符;定期更换;限制失败登录尝试与锁定周期。
- 默认账户治理:修改 SYS/SYSTEM 等默认账户口令;锁定或删除 示例/演示/无用 账户;禁用不需要的 Enterprise Manager 账户(如 DBSNMP/SYSMAN/MGMT_VIEW)。
- 权限最小化:应用账户仅授予所需 对象/系统权限 与自定义 角色;避免授予 DBA 角色;定期审计高权限账户与权限变更。
- 撤销 PUBLIC 危险包执行:对 UTL_FILE、UTL_HTTP、UTL_TCP、UTL_SMTP、DBMS_RANDOM 等撤销 PUBLIC 的 EXECUTE,降低代码执行与数据外泄风险。
- 数据字典保护:设置 O7_DICTIONARY_ACCESSIBILITY=FALSE,禁止非 SYSDBA 通过数据字典基表直接访问敏感元数据。
四 审计与监控
- 启用审计:将 AUDIT_TRAIL 设为 DB/OS,审计关键操作(登录/登出、DDL、权限变更、敏感表访问);定期归档与分析审计日志。
- 登录审计与告警:创建 AFTER LOGON 触发器记录 用户名、IP、时间 等关键要素,结合日志监控平台进行异常登录检测与告警。
- 安全基线核查:定期核查 FAILED_LOGIN_ATTEMPTS、PASSWORD_VERIFY_FUNCTION、PASSWORD_REUSE_MAX、PASSWORD_GRACE_TIME 等策略是否生效。
- 备份与演练:制定 RMAN/导出 备份策略并定期做 恢复演练,确保被攻击或故障时可快速恢复业务。
五 关键配置示例
- 白名单与空闲保活(sqlnet.ora)
tcp.validnode_checking=yes
tcp.invited_nodes=(10.0.1.10,10.0.1.20,127.0.0.1)
SQLNET.EXPIRE_TIME=10
- 传输加密(sqlnet.ora)
SQLNET.ENCRYPTION=REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER=(AES256)
SQLNET.CRYPTO_CHECKSUM=REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA1)
- 登录审计触发器(登录即写库表)
CREATE TABLE LOGON_TABLE(
logon_user VARCHAR2(255),
logon_ip VARCHAR2(255),
logon_time DATE
);
CREATE OR REPLACE TRIGGER TRI_LOGON
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO LOGON_TABLE VALUES(
SYS_CONTEXT('USERENV','SESSION_USER'),
SYS_CONTEXT('USERENV','IP_ADDRESS'),
SYSDATE
);
END;
/
- 密码与锁定策略(Profile)
-- 复杂度函数(11g示例脚本)
@$ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql
ALTER PROFILE DEFAULT LIMIT
PASSWORD_VERIFY_FUNCTION verify_function_11G
FAILED_LOGIN_ATTEMPTS 6
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 90
PASSWORD_REUSE_MAX 5
PASSWORD_LIFE_TIME 90;
- 撤销 PUBLIC 危险包
REVOKE EXECUTE ON UTL_FILE FROM PUBLIC;
REVOKE EXECUTE ON UTL_TCP FROM PUBLIC;
REVOKE EXECUTE ON UTL_SMTP FROM PUBLIC;
REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;
REVOKE EXECUTE ON DBMS_RANDOM FROM PUBLIC;
- 监听器口令(lsnrctl)
lsnrctl
LSNRCTL> change_password
Old password: <当前>
New password: <新>
Reenter new password: <新>
LSNRCTL> save_config