1. 最小化權限分配
嚴格遵循“最小權限原則”分配用戶權限。對于僅需訪問數據庫的普通用戶,將其加入oinstall組(用于安裝Oracle軟件的常規權限);若需管理數據庫(如創建用戶、備份等),再加入dba組(數據庫管理員組)。避免將用戶添加到root或其他高權限組。操作命令:sudo usermod -aG oinstall your_username;sudo usermod -aG dba your_username(需重新登錄使組權限生效)。
2. 強化Oracle數據庫用戶權限管理
數據庫權限應在Oracle內部通過GRANT/REVOKE語句精細化控制。例如,為普通用戶僅授予所需對象的SELECT、INSERT權限,而非ALL PRIVILEGES;避免使用SYSDBA賬戶進行日常操作(該賬戶擁有最高權限)。示例:GRANT SELECT, INSERT ON schema.table TO your_user;;REVOKE DROP ANY TABLE FROM your_user;。
3. 規范SQLPlus文件與目錄權限
SQLPlus生成的日志文件(如alert.log)、輸出文件(如spool結果)需設置合理權限。確保運行SQLPlus的用戶(如oracle或普通用戶)對這些文件具有讀寫權限,同時限制其他用戶訪問。例如,將日志目錄權限設為750(所有者可讀寫執行,組用戶可讀執行,其他用戶無權限):chmod 750 /path/to/log_dir;將文件所有者設為運行用戶:chown your_user:your_group /path/to/file。
4. 配置安全的Oracle網絡連接
通過tnsnames.ora(網絡服務名配置文件)和listener.ora(監聽器配置文件)限制訪問。在listener.ora中,將TCP.VALIDNODE_CHECKING設為YES,并指定允許連接的IP地址(如TCP.INVITED_NODES=(192.168.1.100,192.168.1.101));在tnsnames.ora中,使用SERVICE_NAME替代SID(更安全的服務標識),并避免在連接字符串中硬編碼密碼(可使用sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES=(NONE)禁用操作系統認證)。
5. 啟用Oracle審計功能監控操作
通過審計跟蹤用戶行為,及時發現異常操作。啟用審計功能:AUDIT ALL BY your_user BY ACCESS;(審計指定用戶的所有操作);AUDIT CREATE SESSION, DROP TABLE BY SYS BY ACCESS;(審計系統用戶的會話創建和表刪除操作)。審計日志默認存儲在$ORACLE_BASE/admin/$ORACLE_SID/adump目錄下,定期檢查日志(如使用grep命令篩選FAILED LOGIN、DROP等關鍵字)。
6. 優化環境變量配置防止泄露
將Oracle環境變量(ORACLE_HOME、LD_LIBRARY_PATH、PATH)添加到用戶特定的配置文件(如~/.bash_profile或~/.bashrc)中,而非全局配置文件(如/etc/profile),減少變量暴露風險。配置示例:export ORACLE_HOME=/opt/oracle/instantclient;export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH;export PATH=$ORACLE_HOME:$PATH。修改后執行source ~/.bash_profile使配置生效。
7. 使用rlwrap增強命令行安全
安裝rlwrap工具(提供命令歷史記錄、上下文切換等功能),避免密碼明文出現在命令歷史中。安裝命令:sudo apt install rlwrap;配置別名:在~/.bash_profile中添加alias sqlplus='rlwrap sqlplus',執行source ~/.bash_profile使別名生效。使用時,密碼提示符不會出現歷史記錄,提升密碼輸入安全性。
8. 加密敏感數據與通信
對于敏感數據(如數據庫密碼),使用Oracle Wallet(錢包)進行加密存儲,避免在SQLPlus命令中明文輸入。創建錢包:mkstore -wrl $ORACLE_HOME/network/admin -create;添加憑證:mkstore -wrl $ORACLE_HOME/network/admin -createCredential your_service_name your_user your_password。連接時使用錢包認證:sqlplus /@your_service_name。此外,啟用Oracle Net的加密功能(在sqlnet.ora中設置SQLNET.ENCRYPTION_SERVER=REQUIRED、SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED),確??蛻舳伺c服務器之間的通信加密。