Oracle 的SEC_CASE_SENSITIVE_LOGON
参数
关键版本信息
SEC_CASE_SENSITIVE_LOGON
参数在以下版本中被弃用:
-
Oracle 12c Release 1 (12.1):
- 该参数首次被标记为"过时"(obsolete)
- 但依然保持功能有效
-
Oracle 18c/19c 及更高版本:
- 参数被完全弃用(deprecated)
- 虽然仍能查询和设置,但不再影响数据库行为
- 密码大小写敏感性变为强制启用且不可配置
版本行为对比表
Oracle 版本 | 参数状态 | 默认行为 | 是否可修改 |
---|---|---|---|
10g及以下 | 有效 | 不区分大小写(FALSE) | 是 |
11g | 有效 | 区分大小写(TRUE) | 是 |
12.1 | 过时(Obsolete) | 区分大小写 | 是(但不建议) |
12.2+ | 弃用(Deprecated) | 强制区分大小写 | 否 |
18c/19c/21c | 弃用 | 强制区分大小写 | 否 |
官方文档说明
根据Oracle 19c安全指南:
"As of Oracle Database 12c Release 2, the
SEC_CASE_SENSITIVE_LOGON
parameter is deprecated. Case-sensitive passwords are always enforced and cannot be disabled."
迁移建议
-
升级到12c+的处理方案:
sql-- 1. 检查现有密码兼容性 SELECT username FROM dba_users WHERE password_versions NOT LIKE '%12%'; -- 2. 批量重置密码(如需) BEGIN FOR r IN (SELECT username FROM dba_users WHERE account_status='OPEN') LOOP EXECUTE IMMEDIATE 'ALTER USER '||r.username||' IDENTIFIED BY "NewPass123"'; END LOOP; END;
-
应用适配要求:
- 确保所有连接字符串使用正确大小写
- 更新硬编码密码的配置文件
- 修改自动化的密码管理脚本
替代方案
在12.2+版本中,如需控制认证行为,应考虑:
-
使用统一目录服务:
sqlALTER SYSTEM SET ldap_directory_access = 'PASSWORD';
-
配置全局认证模块:
sql-- 使用Oracle Kerberos适配器 ALTER SYSTEM SET os_authent_prefix = '' SCOPE=SPFILE;
-
实施代理认证:
sqlALTER USER app_user GRANT CONNECT THROUGH proxy_user;
检查当前版本实际行为的方法
sql
-- 方法1:测试密码敏感性(需实际尝试)
DECLARE
v_count NUMBER;
BEGIN
BEGIN
EXECUTE IMMEDIATE 'CREATE USER testuser IDENTIFIED BY "Test123"';
EXECUTE IMMEDIATE 'GRANT CREATE SESSION TO testuser';
BEGIN
EXECUTE IMMEDIATE 'CONNECT testuser/test123';
DBMS_OUTPUT.PUT_LINE('Case-insensitive allowed (unexpected)');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Case-sensitive enforced (expected)');
END;
EXECUTE IMMEDIATE 'DROP USER testuser';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Setup failed: '||SQLERRM);
END;
END;
/
-- 方法2:检查参数元数据(12c+)
SELECT name, isdeprecated, description
FROM v$parameter
WHERE name = 'sec_case_sensitive_logon';
在Oracle 12.2及更高版本中,即使显示参数存在,密码大小写敏感性也始终强制启用,这是Oracle加强安全体系的重要改进。