一、操作系统层面安全设置
创建专用Oracle用户与组
为Oracle数据库创建专用操作系统用户及组,避免使用root管理数据库。执行以下命令:
groupadd oinstall # 归属组
groupadd dba # DBA权限组
useradd -g oinstall -G dba -m oracle # 创建oracle用户,归属oinstall组,附加dba组
passwd oracle # 设置强密码
将oracle用户主目录设为Oracle软件安装路径(如/u01/app/oracle
),并修改环境变量(编辑~/.bash_profile
):
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
source ~/.bash_profile # 生效配置
调整系统内核参数
编辑/etc/sysctl.conf
,添加Oracle推荐的内核参数以优化系统性能与安全性:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行sysctl -p
使参数生效。
配置用户权限限制
编辑/etc/security/limits.conf
,限制oracle用户的资源使用,防止资源滥用:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
SELinux配置(若启用)
若系统启用SELinux,需设置正确的上下文以确保Oracle正常运行:
chcon -R -t oracle_home_t /u01/app/oracle
chcon -R -t oracle_db_t /u01/app/oradata
二、Oracle数据库层面安全设置
数据字典保护
启用数据字典保护,仅允许SYSDBA用户访问基础表,防止未授权访问敏感数据字典:
ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY=FALSE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
口令复杂度策略
通过修改PROFILE设置密码复杂度,要求密码长度≥6位且包含数字、小写字母、大写字母、特殊符号中的至少2类,增强账户安全性:
CREATE PROFILE strong_pwd LIMIT
PASSWORD_VERIFY_FUNCTION verify_function_11G
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 0
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1/24;
ALTER USER sys PROFILE strong_pwd;
ALTER USER system PROFILE strong_pwd;
限制SYSDBA远程登录
禁止SYSDBA权限用户从远程主机登录,降低远程攻击风险:
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=NONE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
开启数据库审计
启用审计功能,记录用户对数据库的所有操作(如登录、数据修改),便于后续追溯:
ALTER SYSTEM SET AUDIT_TRAIL='DB,EXTENDED' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
-- 示例审计命令:审计用户scott的所有操作
AUDIT ALL BY scott BY ACCESS;
配置监听器密码
为Oracle监听器设置密码,防止未授权用户修改监听器配置:
lsnrctl
LSNRCTL> SET CURRENT_LISTENER LISTENER
LSNRCTL> CHANGE_PASSWORD
Old password:
New password:
Reenter new password:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
Password changed for LISTENER
LSNRCTL> SAVE_CONFIG
可信IP访问控制
通过sqlnet.ora
文件限制仅信任的IP地址能访问数据库,减少非法访问:
编辑$ORACLE_HOME/network/admin/sqlnet.ora
,添加:
TCP.VALIDNODE_CHECKING=YES
TCP.INVITED_NODES=(192.168.1.100,192.168.1.101) # 替换为信任的IP
TCP.EXCLUDED_NODES=(192.168.1.200) # 可选:排除的IP
执行lsnrctl reload
使配置生效。
网络传输加密
启用SSL/TLS加密客户端与数据库之间的网络传输,保护数据隐私:
编辑$ORACLE_HOME/network/admin/sqlnet.ora
,添加:
SQLNET.ENCRYPTION_SERVER=REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER=(AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA256)
设置最大连接数
根据服务器性能调整最大连接数,避免过多连接导致资源耗尽:
ALTER SYSTEM SET PROCESSES=200 SCOPE=SPFILE;
ALTER SYSTEM SET SESSIONS=230 SCOPE=SPFILE; -- sessions = processes * 1.1 + 5
SHUTDOWN IMMEDIATE;
STARTUP;
三、日常运维安全维护
定期审计日志检查
定期查看系统日志(/var/log/secure
)和Oracle审计日志($ORACLE_BASE/admin/orcl/adump
),识别异常登录(如多次失败尝试)或未授权操作:
grep "ORA-" /var/log/secure # 查看Oracle相关错误日志
ls -l $ORACLE_BASE/admin/orcl/adump # 查看审计文件
定期备份与恢复测试
制定备份策略(如每日增量备份+每周全量备份),使用RMAN工具备份数据库,并定期测试恢复流程,确保数据可恢复:
rman target /
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
及时更新补丁
定期检查Oracle官方安全公告,及时安装数据库补丁(如PSU、CPU),修复已知漏洞:
# 使用Oracle OPatch工具应用补丁
opatch apply /path/to/patch
文件权限审查
定期检查Oracle关键目录(如$ORACLE_HOME
、$ORACLE_BASE/oradata
)的权限,确保只有oracle用户和dba组有访问权限:
chown -R oracle:dba $ORACLE_HOME
chmod -R 750 $ORACLE_HOME
chown -R oracle:dba $ORACLE_BASE/oradata
chmod -R 750 $ORACLE_BASE/oradata
SSH安全加固
禁用root远程登录,修改SSH默认端口(如22→2222),启用密钥认证,减少SSH攻击面:
编辑/etc/ssh/sshd_config
:
PermitRootLogin no
Port 2222
PubkeyAuthentication yes
PasswordAuthentication no
重启SSH服务:
systemctl restart sshd