温馨提示×

sqlplus在centos上的安全设置怎么做

小樊
44
2025-11-21 21:23:15
栏目: 云计算

SQL*Plus 在 CentOS 上的安全设置清单

一 系统层安全

  • 使用专用的低权限系统账号(如 oracle)运行 SQL*Plus,禁止以 root 直接执行;为该账号设置强口令最小权限登录受限(仅允许 sudo 到 oracle,禁止直接登录)。
  • 严格控制文件与目录权限:Oracle 软件目录(如 $ORACLE_HOME)、客户端目录(如 /opt/oracle/instantclient)、以及包含连接串或脚本的目录,设置为仅属主可读写执行,组和其他人最小化权限(如 750/640)。
  • 清理历史与敏感信息:禁止在命令行中明文书写密码;在脚本中调用 SQL*Plus 时,使用“/nolog + connect”方式或 Here Document,避免在 ps 输出中暴露口令;必要时使用 rlwrap 提升交互体验但不改变口令安全属性。
  • 审计与账号状态:定期核查 /etc/passwd、/etc/shadow、/etc/group,排查异常账户、锁定状态(如 LK/NP)、以及空口令;对 oracle 账号启用登录失败锁定与过期策略(chage),减少被暴力尝试的风险。

二 数据库层安全(通过 SQL*Plus 配置)

  • 口令复杂度与生命周期:以 / as sysdba 登录 SQL*Plus,运行 @?/rdbms/admin/utlpwdmg.sql 创建复杂度函数(如 verify_function_11G),在 DEFAULT 或自定义 PROFILE 中启用:
    • 复杂度:设置 PASSWORD_VERIFY_FUNCTION = verify_function_11G(默认要求长度≥8,包含数字/大小写/特殊字符中至少3类)。
    • 失败锁定:设置 FAILED_LOGIN_ATTEMPTS ≤ 6,并配合 PASSWORD_LOCK_TIME 自动解锁。
    • 历史复用:设置 PASSWORD_REUSE_MAX ≥ 5(禁止复用最近 5 次口令)。
    • 生命周期:设置 PASSWORD_LIFE_TIME ≤ 90 天(可按需收紧至 60–90 天)。
  • 最小权限原则:仅为应用/运维账号授予所需权限,避免使用 DBA 角色;按需授予 CONNECT、RESOURCE 等,并细化到对象级权限。
  • 连接安全:优先采用 OS 认证 本地维护(如 sqlplus / as sysdba);远程连接使用 EZCONNECTTNS 配置,避免在命令行中暴露口令;如需脚本自动化,使用 /nolog + connect 方式隐藏密码。

三 网络安全

  • 监听与端口:仅开放必要端口(Oracle 默认 1521/TCP),通过 firewalld 精细化放行:
    • 开放端口:firewall-cmd --zone=public --add-port=1521/tcp --permanent
    • 重载规则:firewall-cmd --reload
  • 监听绑定与访问控制:在 listener.ora 中绑定到内网地址(如 HOST=127.0.0.1 或内网 IP),仅对受控网段开放;必要时结合 sqlnet.oraTCP.VALIDNODE_CHECKING/TCP.EXCLUDED_NODES 做来源地址限制。
  • 传输加密:启用 Oracle Advanced SecuritySSL/TLS 加密(客户端与数据库之间、或中间件与数据库之间),防止口令与数据在传输中被窃听。

四 审计与合规

  • 启用数据库审计(如 AUDIT_TRAIL=DB/XML),对 CONNECT、DDL、GRANT/REVOKE 及关键业务表进行审计;定期导出与归档审计日志,防止篡改。
  • 定期核查并清理默认/弱口令账户(如历史上常见的 SYS/CHANGE_ON_INSTALL、SYSTEM/MANAGER),对 OPEN 状态账户统一纳入 PROFILE 管理。
  • 结合等保要求,留存账号、权限、口令策略、监听与防火墙配置、审计日志的配置与核查记录,形成闭环整改与复核。

五 快速检查命令清单

  • 系统账号与权限:
    • 查看账户与登录 Shell:getent passwd oracle
    • 查看锁定/空口令状态:passwd -S oracle;空口令排查:getent shadow oracle
    • 登录失败与过期策略:chage -l oracle
  • Oracle 口令策略(SQL*Plus):
    • 查看复杂度函数:SELECT * FROM dba_profiles WHERE resource_name=‘PASSWORD_VERIFY_FUNCTION’;
    • 失败锁定:SELECT * FROM dba_profiles WHERE resource_name=‘FAILED_LOGIN_ATTEMPTS’;
    • 历史复用:SELECT * FROM dba_profiles WHERE resource_name=‘PASSWORD_REUSE_MAX’;
    • 生命周期:SELECT * FROM dba_profiles WHERE resource_name=‘PASSWORD_LIFE_TIME’;
  • 网络与监听:
    • 防火墙放行端口:firewall-cmd --list-ports | grep 1521
    • 监听状态:lsnrctl status(核对监听地址与端口)

0