外观
Oracle 用户认证管理
认证方式
密码认证
- 概述:使用用户名和密码进行认证,是最基本的认证方式
- 配置方法:sql
-- 创建使用密码认证的用户 CREATE USER scott IDENTIFIED BY tiger; -- 修改用户密码 ALTER USER scott IDENTIFIED BY new_password; - 适用场景:大多数数据库环境,特别是小型环境
- 安全注意事项:
- 密码强度要求
- 密码过期策略
- 密码历史记录
- 失败登录尝试限制
外部认证
- 概述:使用操作系统或网络服务进行认证,无需在数据库中存储密码
- 配置方法:sql
-- 创建使用外部认证的用户 CREATE USER scott IDENTIFIED EXTERNALLY; -- 或使用操作系统认证前缀 CREATE USER "OPS$SCOTT" IDENTIFIED EXTERNALLY; - 适用场景:大型企业环境,需要与企业认证系统集成
- 安全注意事项:
- 确保操作系统认证安全
- 适当配置 OS_AUTHENT_PREFIX 参数
- 限制外部认证用户的权限
全局认证
- 概述:使用 Oracle Internet Directory (OID) 等目录服务进行认证
- 配置方法:sql
-- 创建使用全局认证的用户 CREATE USER scott IDENTIFIED GLOBALLY AS 'CN=Scott,OU=Users,DC=example,DC=com'; - 适用场景:企业级环境,需要集中管理用户身份
- 安全注意事项:
- 确保目录服务安全
- 配置适当的目录连接
- 定期同步目录数据
证书认证
- 概述:使用数字证书进行认证,提供最高级别的安全性
- 配置方法:sql
-- 配置 SSL ALTER SYSTEM SET SSL_CIPHER_SUITES='SSL_RSA_WITH_AES_256_CBC_SHA' SCOPE=SPFILE; ALTER SYSTEM SET SSL_VERSION='1.2' SCOPE=SPFILE; -- 重启数据库 SHUTDOWN IMMEDIATE; STARTUP; - 适用场景:对安全性要求极高的环境,如金融、医疗等
- 安全注意事项:
- 确保证书颁发机构 (CA) 可信
- 定期更新证书
- 配置适当的 SSL 参数
密码策略管理
密码复杂度要求
- 配置方法:sql
-- 启用密码验证函数 @?/rdbms/admin/utlpwdmg.sql -- 查看密码验证设置 SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD'; - 推荐设置:
- 最小密码长度:至少 8 位
- 密码复杂度:包含大小写字母、数字和特殊字符
- 密码差异:与旧密码至少 3 个字符不同
密码过期策略
- 配置方法:sql
-- 设置密码过期时间(天数) ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90; -- 设置密码警告时间(天数) ALTER PROFILE DEFAULT LIMIT PASSWORD_WARNING 7; -- 设置密码宽限期(天数) ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME 3; - 推荐设置:
- 密码生命周期:90-180 天
- 密码警告时间:7-14 天
- 密码宽限期:3-7 天
密码历史记录
- 配置方法:sql
-- 设置密码历史记录(保留的旧密码数量) ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 10; -- 设置密码重用时间(天数) ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME 365; - 推荐设置:
- 密码重用最大次数:10-20 次
- 密码重用时间:365 天
失败登录尝试限制
- 配置方法:sql
-- 设置失败登录尝试次数 ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10; -- 设置账户锁定时间(天) ALTER PROFILE DEFAULT LIMIT PASSWORD_LOCK_TIME 1; - 推荐设置:
- 失败登录尝试次数:5-10 次
- 账户锁定时间:1-2 天
认证配置参数
重要参数设置
| 参数名称 | 推荐值 | 说明 |
|---|---|---|
| OS_AUTHENT_PREFIX | "OPS$" | 操作系统认证前缀 |
| REMOTE_OS_AUTHENT | FALSE | 禁用远程操作系统认证 |
| REMOTE_OS_ROLES | FALSE | 禁用远程操作系统角色 |
| SEC_CASE_SENSITIVE_LOGON | TRUE | 启用密码大小写敏感 |
| PASSWORD_VERIFY_FUNCTION | VERIFY_FUNCTION_11G | 密码验证函数 |
| SQLNET.AUTHENTICATION_SERVICES | (BEQ, TCPS) | 认证服务类型 |
| SSL_VERSION | 1.2 | SSL 版本 |
| SSL_CIPHER_SUITES | 适当的加密套件 | SSL 加密套件 |
参数配置示例
sql
-- 启用密码大小写敏感
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE SCOPE=SPFILE;
-- 禁用远程操作系统认证
ALTER SYSTEM SET REMOTE_OS_AUTHENT = FALSE SCOPE=SPFILE;
-- 禁用远程操作系统角色
ALTER SYSTEM SET REMOTE_OS_ROLES = FALSE SCOPE=SPFILE;sqlnet.ora 配置
-- 启用多种认证服务
SQLNET.AUTHENTICATION_SERVICES = (BEQ, TCPS)
-- 配置 SSL
SSL_VERSION = 1.2
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_AES_128_CBC_SHA)
-- 配置证书位置
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)认证审计
登录审计
- 配置方法:sql
-- 启用审计 AUDIT SESSION; -- 审计成功和失败的登录 AUDIT SESSION BY ACCESS; - 查看审计记录:sql
-- 查看审计记录 SELECT username, timestamp, action_name, returncode FROM dba_audit_session ORDER BY timestamp DESC;
认证事件监控
使用 Enterprise Manager:
- 导航到 "安全" 选项卡
- 点击 "审计设置"
- 配置认证相关审计
使用脚本监控:
sql-- 创建监控登录失败的脚本 SELECT username, count(*) as failed_attempts FROM dba_audit_session WHERE action_name = 'LOGON' AND returncode != 0 AND timestamp > SYSDATE - 1 GROUP BY username HAVING count(*) > 5;
认证最佳实践
1. 密码管理
实施强密码策略:
- 最小密码长度至少 12 位
- 要求包含大小写字母、数字和特殊字符
- 定期强制密码更改
- 禁止重用最近使用的密码
密码安全存储:
- 使用 Oracle 内置的密码哈希机制
- 不在脚本或配置文件中硬编码密码
- 使用 Oracle Wallet 存储密码
2. 认证方式选择
根据环境选择合适的认证方式:
- 小型环境:密码认证
- 中型环境:外部认证
- 大型企业:目录服务认证
- 高安全环境:证书认证
混合认证策略:
- 管理员:使用强密码或证书认证
- 应用程序:使用外部认证或钱包
- 普通用户:使用密码认证
3. 账户管理
定期审查用户账户:
- 禁用或删除未使用的账户
- 审查特权账户的使用情况
- 确保所有账户都有适当的认证方式
锁定默认账户:
sql-- 锁定默认账户 ALTER USER SYSTEM ACCOUNT LOCK; ALTER USER SYS ACCOUNT LOCK; -- 注意:SYS 和 SYSTEM 账户通常需要保持可用,应使用强密码保护
4. 网络安全
加密网络连接:
- 使用 SSL/TLS 加密客户端连接
- 配置适当的加密套件
- 验证证书有效性
限制网络访问:
- 使用防火墙限制数据库端口访问
- 配置 sqlnet.ora 中的访问控制
- 使用 VPN 进行远程访问
5. 监控与响应
监控认证事件:
- 配置审计以捕获所有认证事件
- 使用 Enterprise Manager 监控登录活动
- 设置失败登录尝试告警
响应认证异常:
- 对多次失败登录尝试的账户进行调查
- 及时处理可疑的认证活动
- 定期审查认证日志
常见问题(FAQ)
Q1: 如何启用强密码策略?
A1: 可以通过以下步骤启用强密码策略:
- 运行 Oracle 提供的密码验证脚本:
@?/rdbms/admin/utlpwdmg.sql - 修改默认配置文件的密码相关设置:sql
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90; ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME 7; ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10; ALTER PROFILE DEFAULT LIMIT PASSWORD_LOCK_TIME 1; ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 10; - 启用密码大小写敏感:sql
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE SCOPE=SPFILE;
Q2: 如何配置 SSL 认证?
A2: 配置 SSL 认证的步骤:
- 创建钱包并生成证书请求
- 获取 CA 签名的证书
- 配置数据库参数:sql
ALTER SYSTEM SET SSL_CIPHER_SUITES='SSL_RSA_WITH_AES_256_CBC_SHA' SCOPE=SPFILE; ALTER SYSTEM SET SSL_VERSION='1.2' SCOPE=SPFILE; - 配置 sqlnet.ora 文件:
SQLNET.AUTHENTICATION_SERVICES = (BEQ, TCPS) WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet))) - 重启数据库
- 创建使用证书认证的用户
Q3: 如何处理账户被锁定的情况?
A3: 处理账户锁定的步骤:
- 确认账户锁定原因:sql
SELECT username, account_status, lock_date FROM dba_users WHERE username = 'SCOTT'; - 解锁账户:sql
ALTER USER scott ACCOUNT UNLOCK; - (可选)重置密码:sql
ALTER USER scott IDENTIFIED BY new_password; - 调查锁定原因,检查审计日志:sql
SELECT username, timestamp, action_name, returncode FROM dba_audit_session WHERE username = 'SCOTT' AND timestamp > SYSDATE - 1 ORDER BY timestamp DESC;
Q4: 如何与企业 LDAP 目录集成进行认证?
A4: 与企业 LDAP 目录集成的步骤:
- 配置 Oracle Internet Directory (OID) 或使用第三方 LDAP 目录
- 配置数据库参数:sql
ALTER SYSTEM SET LDAP_DIRECTORY_ACCESS = 'PASSWORD' SCOPE=SPFILE; ALTER SYSTEM SET LDAP_DIRECTORY_SYSAUTH = 'YES' SCOPE=SPFILE; - 配置 ldap.ora 文件:
DIRECTORY_SERVERS = (ldap_server:389) DEFAULT_ADMIN_CONTEXT = "dc=example,dc=com" DIRECTORY_SERVER_TYPE = OID - 创建使用全局认证的用户:sql
CREATE USER scott IDENTIFIED GLOBALLY AS 'CN=Scott,OU=Users,DC=example,DC=com';
Q5: 如何监控和防止暴力破解攻击?
A5: 监控和防止暴力破解攻击的方法:
- 配置失败登录尝试限制:sql
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5; - 启用审计:sql
AUDIT SESSION BY ACCESS; - 创建监控脚本,定期检查失败登录尝试:sql
SELECT username, count(*) as failed_attempts FROM dba_audit_session WHERE action_name = 'LOGON' AND returncode != 0 AND timestamp > SYSDATE - 1/24 GROUP BY username HAVING count(*) > 3; - 设置告警机制,当检测到多次失败登录尝试时发送通知
- 考虑使用防火墙或入侵检测系统来监控网络级别的攻击
