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的安全性,防范未授權訪問、密碼泄露及數據篡改等風險。實際生產環境中,還需結合具體業務需求調整安全策略,并定期進行安全評估。