2. Oracle安全架构概览
Oracle数据库的安全能力并不是单一功能,而是由多个相互衔接的组件共同构成的一条纵深防御链。理解这条链的关键,是把它看成“从用户进入数据库,到访问数据,再到留下证据、保护数据本身”的连续过程。身份认证解决“你是谁”,授权解决“你能做什么”,审计解决“你做过什么”,加密解决“数据即使被拿走也看不懂”。四者缺一不可,且在合规要求中分别对应不同的控制项。
一、身份认证:确认访问者身份
Oracle支持多种认证方式,常见的有数据库口令认证、操作系统认证、以及基于外部服务的集中认证。数据库口令认证由Oracle自身维护用户口令,口令以加密形式存放在数据字典中;操作系统认证依赖服务器本地用户与OS_AUTHENT_PREFIX参数配合,常用于本地管理;集中认证则通过LDAP、Kerberos或RADIUS等外部服务完成,适合多系统统一身份管理。
从合规角度看,身份认证对应的是“访问控制”中的身份唯一性与鉴别要求。例如等保2.0要求“应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换”。在Oracle中,这意味着需要关注PROFILE中的FAILED_LOGIN_ATTEMPTS、PASSWORD_LIFE_TIME、PASSWORD_REUSE_MAX等参数,并避免使用默认口令或共享账号。
-- 查看当前用户的认证与口令策略
SELECT username, account_status, authentication_type
FROM dba_users
WHERE username = 'APP_USER';
-- 查看口令相关资源限制
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name LIKE 'PASSWORD%'
OR resource_name = 'FAILED_LOGIN_ATTEMPTS';
实际检查时,若发现account_status为OPEN且authentication_type为PASSWORD,说明该账号依赖数据库口令;若PASSWORD_LIFE_TIME为UNLIMITED,则不符合定期更换要求,应调整对应PROFILE。
二、授权:控制可执行的操作
认证通过后,用户能做什么由授权决定。Oracle的授权分为系统权限、对象权限和角色三类。系统权限允许执行特定数据库操作,如CREATE SESSION、SELECT ANY TABLE;对象权限针对具体对象,如对某张表的SELECT、INSERT;角色是权限的集合,便于批量授予和回收。
合规中强调“最小权限”和“职责分离”。例如,应用账号不应拥有DBA角色,审计账号不应能修改被审计的数据。检查时可通过以下语句观察权限分布:
-- 查看用户被授予的系统权限
SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'APP_USER';
-- 查看用户拥有的角色
SELECT grantee, granted_role, default_role
FROM dba_role_privs
WHERE grantee = 'APP_USER';
若APP_USER被直接授予了SELECT ANY TABLE,即使它只需要访问两张业务表,也属于权限过大。更合理的做法是只授予这两张表的SELECT对象权限,或通过自定义角色集中管理。
三、审计:记录并追溯行为
审计是合规中最直接的证据来源。Oracle提供统一审计和传统审计两种机制。统一审计从12c起成为推荐方式,通过CREATE AUDIT POLICY定义审计策略,再AUDIT POLICY启用,审计记录写入UNIFIED_AUDIT_TRAIL视图。传统审计则通过AUDIT语句将记录写入SYS.AUD$,可通过DBA_AUDIT_TRAIL查看。
-- 创建统一审计策略:审计对HR.EMPLOYEES的查询和更新
CREATE AUDIT POLICY audit_emp_access
ACTIONS SELECT, UPDATE ON hr.employees;
-- 启用策略
AUDIT POLICY audit_emp_access;
-- 查看审计记录
SELECT event_timestamp, dbusername, action_name, object_name, return_code
FROM unified_audit_trail
WHERE object_name = 'EMPLOYEES'
ORDER BY event_timestamp DESC;
审计结果中,return_code为0表示操作成功,非0表示失败;dbusername标识执行者。合规检查时,应确认关键表、特权操作、登录失败等均已纳入审计范围,并确保审计记录不被普通用户删除或修改。
四、加密:保护数据机密性
加密解决的是数据存储与传输过程中的机密性问题。Oracle提供透明数据加密(TDE)、网络加密和DBMS_CRYPTO包等能力。TDE对表空间或列进行加密,应用无需修改代码;网络加密通过sqlnet.ora中的SQLNET.ENCRYPTION_CLIENT和SQLNET.ENCRYPTION_TYPES_CLIENT配置,防止传输被窃听。
-- 查看表空间加密状态
SELECT tablespace_name, encrypted
FROM dba_tablespaces;
-- 查看网络加密配置
-- sqlnet.ora 示例
SQLNET.ENCRYPTION_CLIENT = required
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)
合规中,加密通常对应“数据保密性”要求。若存储介质可能被物理获取,或备份文件需要外送,TDE和备份加密就是必要控制。检查时应确认敏感表空间encrypted为YES,且网络加密未被设置为rejected。
五、组件协同与合规映射
四个组件并非孤立:认证决定身份,授权决定范围,审计记录行为,加密保护内容。它们共同构成“进不来、拿不走、改不了、看不懂、赖不掉”的防护效果。在合规检查中,可以按以下对应关系快速定位:
| 合规关注点 | Oracle组件 | 关键检查对象 |
|---|---|---|
| 身份唯一与鉴别 | 认证 | DBA_USERS、DBA_PROFILES |
| 最小权限与职责分离 | 授权 | DBA_SYS_PRIVS、DBA_ROLE_PRIVS |
| 行为可追溯 | 审计 | UNIFIED_AUDIT_TRAIL、DBA_AUDIT_TRAIL |
| 数据保密性 | 加密 | DBA_TABLESPACES、sqlnet.ora |
从实际运维角度看,建议按“先认证、再授权、后审计、补加密”的顺序逐步加固。先清理默认账号和弱口令策略,再回收过度权限,然后对关键对象启用统一审计,最后对敏感表空间和网络链路实施加密。每一步都应有对应的查询语句和判断标准,而不是停留在“已配置”的层面。只有把组件、参数、视图和合规条款对应起来,安全架构才真正可检查、可验证、可追溯。