CentOS上SQL*Plus安全设置指南
创建用户与分配权限
使用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; -- 使权限立即生效
若需为用户分配预定义角色(如CONNECT、RESOURCE),可使用ALTER USER设置默认角色:
ALTER USER app_user DEFAULT ROLE CONNECT, RESOURCE;
权限最小化原则
遵循“最小权限原则”,仅授予用户完成工作所需的最低权限。例如,开发人员仅需SELECT和INSERT权限,不应授予DROP TABLE等高危权限;管理员权限应通过角色分离(如DBA角色),避免直接授予用户。
密码有效期策略
通过修改/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
密码复杂度要求
修改PAM(Pluggable Authentication Modules)配置,强制密码具备复杂度。编辑/etc/pam.d/system-auth和/etc/pam.d/password-auth文件,添加以下规则:
@、#);# 在/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
密码验证失败锁定
通过pam_tally2模块设置密码尝试次数限制,防止暴力破解。编辑/etc/pam.d/system-auth和/etc/pam.d/password-auth文件,添加以下规则:
# 在/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。
隐藏密码输入
避免在命令行直接输入密码(会被ps等命令查看),使用以下方式:
sqlplus app_user,然后根据提示输入密码;/nolog模式:sqlplus /nolog,再通过CONNECT app_user/password@service_name连接(密码仍需手动输入,但不会暴露在命令历史中)。配置文件权限管理
SQL*Plus的配置文件(如login.sql、glogin.sql,通常位于用户家目录或$ORACLE_HOME/sqlplus/admin)包含敏感信息(如默认用户名、密码),需设置严格权限:
chmod 600 ~/.sqlnet.ora ~/.oracle/profile
chmod 700 ~/.sqlplus
禁用默认账户
禁用Oracle数据库中的默认账户(如scott、system),防止未授权访问:
ALTER USER scott ACCOUNT LOCK PASSWORD EXPIRE;
ALTER USER system ACCOUNT LOCK PASSWORD EXPIRE;
限制远程访问
若无需远程连接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
使用加密连接
配置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)))
启用数据库审计
开启Oracle审计功能,记录用户操作(如登录、数据修改、权限变更),便于事后追溯。例如,审计所有用户的SELECT操作:
AUDIT SELECT TABLE BY ACCESS;
查看审计日志:SELECT * FROM DBA_AUDIT_TRAIL WHERE ACTION_NAME = 'SELECT' ORDER BY TIMESTAMP DESC;
监控SQL*Plus登录
通过操作系统日志(/var/log/secure)或Oracle审计日志监控SQLPlus登录行为,及时发现异常登录(如频繁失败、陌生IP登录)。例如,使用grep命令过滤SQLPlus登录记录:
grep "sqlplus" /var/log/secure
定期备份配置
定期备份SQL*Plus配置文件(如login.sql)、数据库备份脚本及审计日志,防止配置丢失或篡改。
自动化安全检查
编写Shell脚本定期检查密码策略执行情况(如chage -l app_user)、SQL*Plus配置文件权限(如ls -l ~/.sqlnet.ora),并通过邮件发送报告。
通过以上步骤,可全面提升CentOS环境下SQL*Plus的安全性,防范未授权访问、密码泄露及数据篡改等风险。实际生产环境中,还需结合具体业务需求调整安全策略,并定期进行安全评估。