版本:oracle19c
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 -
ProductionVersion 19.3.0.0.0
用户程序报以下错误:
ORA-12638: 身份证明检索失败的解决方法
查询资料说可以修改sqlnet.ora文件解决(路径:%ORACLE_HOME%\network\admin\sqlnet.ora):
SQLNET.AUTHENTICATION_SERVICES= (NTS)
修改为:SQLNET.AUTHENTICATION_SERVICES= (NONE)
说明:
SQLNET.AUTHENTICATION_SERVICES 表示oracle使用哪种验证方式,
NTS表示采用本地操作系统认证,
NONE表示将采用口令文件方式认证。
设定了none后,本地的操作系统认证将不被许可,oracle将采用口令文件认证
(此时 remote_login_passwordfile=exclusive)
如connect /as sysdba 登录,后报错RA-01031: insufficient privileges
实际上是要求你输入sysdba的用户名和密码
这样确实解决了!
但又出现新问题:服务器上sys无法登录了!
sqlplus / as sysdba无法登录
用sys/密码也不行
但用system/密码,可以登录
...
再测试原来是密码确实输入错了,因为我已经设置不区分大小写,所以就没在意大小写。
而且发现一个奇怪的现象:
sys用户必须区分大小写才能登录。
system用户不区分大小写,就可以登录。
...
经过高人指点,才知道这和表use$有关。
SQL> COL NAME FORMAT A8;
SQL> COL PASSWORD FORMAT A16;
SQL> COL SPARE4 FORMAT A20;
SQL> select user#,name,password,substr(spare4,1,20) as spare4 from user$
where name in ('SYS','SYSTEM');
USER# NAME PASSWORD SPARE4
---------- -------- ---------------- --------------------
0 SYS S:29373CC71D0D61C29A
9 SYSTEM 58A91SE52443A345 S:3EE9C34974C936B40C
SQL>
...
从11.1开始密码大小写敏感了,同时可以设置sec_case_sensitive_logon参数可以忽略大小写敏感。
1.password_versions的优先级大于sec_case_sensitive_logon
2.通过修改USER$.SPARE4为空实现了屏蔽ORACLE 11g密码大小写敏感
--在sec_case_sensitive_logon=true的情况下,数据库密码是大小写敏感
--11g本身创建的用户是区分大小写,而他们的区别仅仅是在dba_users.password_versions中有不一样,跟踪到基表发现就是USER$.SPARE4列不一样(10g的该列为空).
猜想:password_versions的优先级大于sec_case_sensitive_logon这个参数
...
验证猜想
如果是password_versions的优先级大于sec_case_sensitive_logon
那么,如果我修改了USER$.SPARE4,使得dba_users.password_versions变成和10g一样,是否就可以实现不区分密码大小写的问题,
如果不缺乏证明:password_versions的优先级大于sec_case_sensitive_logon这个参数,反之失败.
SQL> update SYS.USER$ t set SPARE4='' where name='ORA11G';
1 row updated.
SQL> COMMIT;
Commit complete.
SQL> alter system flush shared_pool;
System altered.
SQL> conn ora11g/dddd
Connected.
SQL> conn ora11g/DdDd
Connected.
由此得出两个结论:
1.password_versions的优先级大于sec_case_sensitive_logon
2.通过修改USER$.SPARE4为空实现了屏蔽ORACLE11g密码大小写敏感
(以上节自:https://www.xifenfei.com/2013/05/关于ORACLE-11G密码大小写敏感猜想user-spare4.html)
Tag: Oracle19c sqlnet OracleError Oracle密码