一、权限管理:最小化授权与精细化控制
SQL*Plus在CentOS上的安全性始于用户权限的精细化管理。应避免使用SYS、SYSTEM等超级用户执行日常操作,而是通过CREATE USER命令创建专用用户(如app_user),并分配最小必要权限(如CREATE SESSION、SELECT、INSERT等)。例如:
CREATE USER app_user IDENTIFIED BY StrongPassword123!;
GRANT CREATE SESSION, SELECT ON schema_name.table_name TO app_user;
FLUSH PRIVILEGES;
为防止权限滥用,可通过PROFILE限制用户资源使用(如最多同时开启5个会话、空闲超时30分钟自动断开):
CREATE PROFILE app_profile LIMIT SESSIONS_PER_USER 5, IDLE_TIME 30;
ALTER USER app_user PROFILE app_profile;
此外,遵循最小权限原则,定期审计用户权限(如通过DBA_SYS_PRIVS视图检查),及时回收不必要的权限。
二、连接安全:加密与访问控制
禁用命令行明文密码是基础要求,应避免使用sqlplus app_user/password格式,推荐通过交互式输入密码(sqlplus app_user)或使用密码文件(如orapwd创建的orapw$ORACLE_SID,权限设为600)。
启用SQL*Net加密,修改$ORACLE_HOME/network/admin/sqlnet.ora文件,强制使用AES256加密通信,防止密码在网络传输中被截获:
SQLNET.ENCRYPTION_CLIENT = REQUIRED
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
配置防火墙限制访问,使用firewalld仅允许特定IP访问Oracle监听端口(默认1521),减少暴露面:
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自带的VERIFY_FUNCTION(位于?/rdbms/admin/utlpwdmg.sql)强制密码复杂度,要求包含大小写字母、数字和特殊字符,且不与用户名相似。设置方法:
@?/rdbms/admin/utlpwdmg.sql; -- 安装密码验证脚本
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;
同时,配置密码有效期(如90天)和历史(禁止重复使用最近5次密码),强制用户定期更换密码:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90, PASSWORD_REUSE_TIME 365, PASSWORD_REUSE_MAX 5;
这些策略可降低密码被猜测或破解的风险。
四、环境与日志:审计与保护
保护密码文件,若使用orapwd创建密码文件(如orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID),需设置严格权限(仅oracle用户可读写):
chmod 600 $ORACLE_HOME/dbs/orapw$ORACLE_SID
chown oracle:oinstall $ORACLE_HOME/dbs/orapw$ORACLE_SID
启用审计功能,通过AUDIT命令记录用户关键操作(如登录、数据修改),便于后续追溯。例如,审计app_user的所有登录行为:
AUDIT CREATE SESSION BY app_user BY ACCESS;
保护日志文件,确保Oracle的告警日志($ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/alert_$ORACLE_SID.log)和审计日志仅能被oracle用户访问,防止敏感信息泄露。
五、系统级安全:操作系统加固
加强系统访问控制,关闭不需要的网络服务(如通过systemctl status检查并停止无用服务),禁止root用户通过SSH远程登录(修改/etc/ssh/sshd_config中的PermitRootLogin no)。
定期更新补丁,关注Oracle官方发布的安全补丁,及时升级数据库版本,修复已知漏洞(如通过opatch工具应用补丁)。
备份与监控,定期备份数据(如使用RMAN),并通过V$SESSION、DBA_AUDIT_TRAIL等视图定期检查异常行为(如频繁失败的登录尝试),及时响应安全事件。