centos

centos上sqlplus安全设置

小樊
45
2025-10-04 23:46:47
栏目: 云计算

CentOS上SQL*Plus安全设置指南

一、用户与权限安全管理

  1. 创建用户与分配权限
    使用CREATE USER命令创建专用用户(避免使用默认用户如system),并为该用户分配最小必要权限(如仅需CREATE SESSION连接数据库、SELECT查询数据则仅授此类权限,避免过度授权)。例如:

    CREATE USER app_user IDENTIFIED BY StrongPassword123;
    GRANT CREATE SESSION, SELECT ON schema_name.table_name TO app_user;
    FLUSH PRIVILEGES; -- 使权限立即生效
    

    若需为用户分配预定义角色(如CONNECTRESOURCE),可使用ALTER USER设置默认角色:

    ALTER USER app_user DEFAULT ROLE CONNECT, RESOURCE;
    
  2. 权限最小化原则
    遵循“最小权限原则”,仅授予用户完成工作所需的最低权限。例如,开发人员仅需SELECTINSERT权限,不应授予DROP TABLE等高危权限;管理员权限应通过角色分离(如DBA角色),避免直接授予用户。

二、操作系统级密码安全配置

  1. 密码有效期策略
    通过修改/etc/login.defs文件设置密码有效期,强制用户定期更换密码。例如,设置密码最大有效期为90天、修改后7天内不得再次修改、过期前10天提醒:

    sed -i "s/PASS_MAX_DAYS.*/PASS_MAX_DAYS\t90/g" /etc/login.defs
    sed -i "s/PASS_MIN_DAYS.*/PASS_MIN_DAYS\t7/g" /etc/login.defs
    sed -i "s/PASS_WARN_AGE.*/PASS_WARN_AGE\t10/g" /etc/login.defs
    

    对现有用户可通过chage命令调整(效果等同于修改login.defs):

    chage -M 90 -m 7 -W 10 app_user
    
  2. 密码复杂度要求
    修改PAM(Pluggable Authentication Modules)配置,强制密码具备复杂度。编辑/etc/pam.d/system-auth/etc/pam.d/password-auth文件,添加以下规则:

    • 密码最小长度12位;
    • 包含大小写字母、数字、特殊字符(如@#);
    • 禁止使用最近5次用过的密码。
      示例配置:
    # 在/etc/pam.d/system-auth中添加/修改
    password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
    password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
    
  3. 密码验证失败锁定
    通过pam_tally2模块设置密码尝试次数限制,防止暴力破解。编辑/etc/pam.d/system-auth/etc/pam.d/password-auth文件,添加以下规则:

    • 连续输错5次密码后锁定账户;
    • 锁定300秒(5分钟)后自动解锁。
      示例配置:
    # 在/etc/pam.d/system-auth中添加/修改
    auth required pam_tally2.so deny=5 onerr=fail unlock_time=300
    account required pam_tally2.so
    

    查看用户锁定状态:pam_tally2 -u app_user;解锁账户:pam_tally2 -r -u app_user

三、SQL*Plus自身安全配置

  1. 隐藏密码输入
    避免在命令行直接输入密码(会被ps等命令查看),使用以下方式:

    • 交互式输入:sqlplus app_user,然后根据提示输入密码;
    • 使用/nolog模式:sqlplus /nolog,再通过CONNECT app_user/password@service_name连接(密码仍需手动输入,但不会暴露在命令历史中)。
  2. 配置文件权限管理
    SQL*Plus的配置文件(如login.sqlglogin.sql,通常位于用户家目录或$ORACLE_HOME/sqlplus/admin)包含敏感信息(如默认用户名、密码),需设置严格权限:

    chmod 600 ~/.sqlnet.ora ~/.oracle/profile
    chmod 700 ~/.sqlplus
    
  3. 禁用默认账户
    禁用Oracle数据库中的默认账户(如scottsystem),防止未授权访问:

    ALTER USER scott ACCOUNT LOCK PASSWORD EXPIRE;
    ALTER USER system ACCOUNT LOCK PASSWORD EXPIRE;
    

四、网络与访问控制安全

  1. 限制远程访问
    若无需远程连接SQL*Plus,关闭Oracle监听器的远程访问;若需远程访问,通过防火墙限制访问IP范围。例如,使用firewalld仅允许特定IP访问1521端口(Oracle默认端口):

    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="1521" accept' --permanent
    firewall-cmd --reload
    
  2. 使用加密连接
    配置Oracle Net Services使用SSL/TLS加密,保护数据传输安全。编辑sqlnet.ora文件(位于$ORACLE_HOME/network/admin),添加以下配置:

    SQLNET.AUTHENTICATION_SERVICES=(NTS)
    SSL_CLIENT_AUTHENTICATION=TRUE
    SSL_VERSION=1.2
    WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/path/to/wallet)))
    

五、审计与监控

  1. 启用数据库审计
    开启Oracle审计功能,记录用户操作(如登录、数据修改、权限变更),便于事后追溯。例如,审计所有用户的SELECT操作:

    AUDIT SELECT TABLE BY ACCESS;
    

    查看审计日志:SELECT * FROM DBA_AUDIT_TRAIL WHERE ACTION_NAME = 'SELECT' ORDER BY TIMESTAMP DESC;

  2. 监控SQL*Plus登录
    通过操作系统日志(/var/log/secure)或Oracle审计日志监控SQLPlus登录行为,及时发现异常登录(如频繁失败、陌生IP登录)。例如,使用grep命令过滤SQLPlus登录记录:

    grep "sqlplus" /var/log/secure
    

六、其他安全实践

  1. 定期备份配置
    定期备份SQL*Plus配置文件(如login.sql)、数据库备份脚本及审计日志,防止配置丢失或篡改。

  2. 自动化安全检查
    编写Shell脚本定期检查密码策略执行情况(如chage -l app_user)、SQL*Plus配置文件权限(如ls -l ~/.sqlnet.ora),并通过邮件发送报告。

通过以上步骤,可全面提升CentOS环境下SQL*Plus的安全性,防范未授权访问、密码泄露及数据篡改等风险。实际生产环境中,还需结合具体业务需求调整安全策略,并定期进行安全评估。

0
看了该问题的人还看了