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),确保客户端与服务器之间的通信加密。