SQL*Plus作为Oracle数据库的命令行工具,其安全基础依赖于操作系统用户的配置。需通过以下设置强化操作系统用户安全性:
/etc/shadow文件(密码加密存储位置),确保用户密码字段无空值(空密码用户无法登录);/etc/login.defs文件,调整PASS_MAX_DAYS(密码最大使用天数,如90天)、PASS_MIN_DAYS(修改密码后再次修改的最小间隔,如7天)、PASS_WARN_AGE(密码过期前提醒天数,如10天);/etc/pam.d/system-auth和/etc/pam.d/password-auth文件,添加pam_pwquality.so参数(如dcredit=-1要求至少1个数字、ucredit=-1要求至少1个大写字母、lcredit=-1要求至少1个小写字母、ocredit=-1要求至少1个特殊字符、minlen=12要求最小长度12位),并启用remember=5记录最近5次密码防止重复使用;/etc/pam.d/system-auth和/etc/pam.d/password-auth中添加pam_tally2.so参数(如deny=5允许输错5次、unlock_time=300锁定300秒),并通过pam_tally2 -u username查询锁定状态、pam_tally2 -r -u username解锁。~/.sqlnet.ora),添加SQLNET.LOG_FILE=/dev/null和SQLNET.LOG_LEVEL=OFF关闭日志记录,避免密码等敏感信息泄露;~/.sqlnet.ora中添加SQLNET.AUTHENTICATION_SERVICES=(NONE),防止密码在命令行历史或进程列表中暴露;~/sqlplus.sh),将默认提示行(如SQL*Plus: Release x.x.x.x - Production)修改为仅提示输入用户名(如Enter user-name:),增强交互安全性。firewall-cmd命令开放SQL*Plus默认端口(1521/tcp),并限制访问源IP(如仅允许运维服务器IP):firewall-cmd --zone=public --add-port=1521/tcp --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="1521" protocol="tcp" accept' --permanent
firewall-cmd --reload
/etc/ssh/sshd_config中的PermitRootLogin no),创建专用数据库用户(如app_user)并分配最小权限(如CREATE SESSION、SELECT)。GRANT CREATE SESSION, SELECT ON schema.table TO app_user),避免授予DBA等高权限角色;read_only_role),使用ALTER USER app_user DEFAULT ROLE read_only_role,确保用户登录后自动获得必要权限;SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'APP_USER';查询用户权限,及时回收不必要的权限(如REVOKE DROP ANY TABLE FROM app_user)。AUDIT CREATE SESSION BY app_user;),并定期查看审计日志(SELECT * FROM DBA_AUDIT_TRAIL WHERE USERNAME = 'APP_USER';);rsyslog或auditd监控SQL*Plus相关日志(如/var/log/secure中的登录记录),及时发现异常登录行为(如频繁输错密码、异地登录)。