Oracle 11g关闭密码大小写敏感不能修改\_SEC\_CASE\_SENSITIVE\_LOGON参数,而应清空PROFILE的PASSWORD_VERIFY_FUNCTION并重设用户密码(不用双引号)。
oracle 11g 默认启用了密码大小写敏感,关闭它必须修改 _sec_case_sensitive_logon 隐含参数,但直接改参数不生效——你得先确认实例是否运行在非缺省密码验证模式下。
为什么 ALTER SYSTEM SET _SEC_CASE_SENSITIVE_LOGON=FALSE 不起作用
这个参数是静态隐含参数(underscore parameter),不能在线修改。即使你用 SCOPE=BOTH,Oracle 也会报错 ORA-02095: specified initialization parameter cannot be modified。更关键的是:从 11gR2 开始,该参数实际已被废弃,真正控制行为的是密码验证函数和用户的 PASSWORD_VERIFY_FUNCTION 属性。
- 检查当前值:
SELECT ksppinm, ksppstvl FROM x$ksppi JOIN x$ksppcv USING (indx) WHERE ksppinm = '_sec_case_sensitive_logon';(返回值可能为 TRUE,但已无实际意义) - 真正起效的是用户 profile 中的
PASSWORD_VERIFY_FUNCTION;如果设为NULL或未启用复杂度校验,大小写敏感实际由底层认证机制决定 - 11g 默认使用
ora12c_strong_verify_function(即使版本是 11g,补丁后也可能引入),它强制区分大小写
正确关闭密码大小写敏感的实操路径
不是改参数,而是重置密码策略链路。核心动作是让 Oracle 回退到传统(case-insensitive)认证逻辑:
- 确认当前 profile:
SELECT profile FROM dba_users WHERE username = 'YOUR_USER'; - 修改 profile,清空密码验证函数:
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL; - 对已有用户重置密码(必须用小写字母重设,且不加双引号):
ALTER USER scott IDENTIFIED BY tiger;(注意:不要写成IDENTIFIED BY "Tiger") - 重启数据库不是必须的,但建议执行
ALTER SYSTEM FLUSH SHARED_POOL;清理 PL/SQL 认证缓存
容易踩的坑:双引号、密码文件、远程登录场景
即使 profile 改了,以下情况仍会触发大小写敏感行为:
- 用户密码用双引号创建(如
CREATE USER u IDENTIFIED BY "PassWord";)→ 登录时必须严格匹配大小写,且该用户永远无法“关闭”敏感性 - 使用密码文件认证(
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE)时,密码文件中的口令始终区分大小写,与数据库参数无关 - 通过 JDBC 连接时,若 URL 含
oracle.jdbc.thin.forcePasswordCase=true(某些老驱动默认开启),客户端会强制转大写再比对 → 改服务器端无效,需在连接串中显式设为false - 监听器配置中
SQLNET.ALLOWED_LOGON_VERSION_SERVER若设为 12a 或更高,会强制启用强密码策略 → 应设为11或8(需评估安全风险)
最常被忽略的一点:改完 profile 后,旧用户不会自动继承新策略,必须显式重设密码;而重设时若误用双引号,等于又锁死了大小写敏感路径。










