Oracle
Allen 2023-04-02 15:01:12 24257 0 0 0 0
Oracle19c,sqlnet,OracleError,Oracle密码,ORA-12638: 身份证明检索失败的解决方法:设置SQLNET.AUTHENTICATION_SERVICES= NONE,但sys无法登录问题

版本: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密码
我也要发一个   ·   返回首页   ·   返回[Oracle]   ·   前一个   ·   下一个
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Oracle]   ·   返回顶部