合 12c中报错ORA-28040 No matching authentication protocol 或 ORA-01017 invalid username password
Tags: Oracle故障处理ORA-01017ORA-28040密码错误
现象
在Oracle 12c中,本地sqlplus / as sysdba
可以正常登陆,但是SYS用户和普通用户远程都不能登陆,报错“ORA-01017: invalid username/password; logon denied”,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [oracle@odsa ~]$ sqlplus lhr/lhr SQL*Plus: Release 12.2.0.1.0 Production on Mon Feb 28 16:22:12 2022 Copyright (c) 1982, 2016, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied [oracle@hqomsa ~]$ sqlplus sys/oracle@192.168.60.111/ods as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Feb 28 16:32:41 2022 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied |
表面看,的确是用户名和密码不对。
其实,这是由于12c中的参数sec_case_sensitive_logon配置不当导致的。
在Oracle 11g之前,Oracle用户密码是不区分大小写的。从Oracle 11g开始,密码区分大小写,采用参数SEC_CASE_SENSITIVE_LOGON控制,该参数值默认为TRUE,表示密码区分大小写。但是,在Oracle 12c中,由于该参数已经废弃,所以,不建议修改该参数值。如果将该参数值设置成FALSE,那么启动的时候会有提示:ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance。
但是,设置成FALSE仍然生效,即忽略密码大小写验证。另外,如果把 sec_case_sensitive_logon设置为false,将导致正常用户无法登录,即使密码都是正确的,也会报 ora-01017错误,用户密码错误 SettingSEC_CASE_SENSITIVE_LOGON to FALSE when
SQLNET.ALLOWED_LOGON_VERSION_SERVER is set to 12 or 12a causes all accounts to become inaccessible
还有另外一个原因,若SYS本地可以登录,但是远程不能登录,那么去看看你是否创建了密码文件,有关密码文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | -- 密码文件 linux区分$ORACLE_SID大小写 select * from v$pwfile_users; -- linux:orapw+$ORACLE_SID -- windows: pwd+$ORACLE_SID.ora orapwd file=orapworcl force=y password=oracle orapwd file='+data/lhrracphy/PASSWORD/pwdlhrracphy' force=y dbuniquename=lhrracphy format=12 password=lhr orapwd file='+data' force=y dbuniquename=lhrracphy format=12 password=lhr orapwd file='+data/HTZXDBPRI/password/orapwhtzxdbpri' force=y dbuniquename=htzxdbpri format=12 sys=oracle sysbackup=oracle sysdg=oracle syskm=oracle orapwd input_file='+data/HTZXDBPRI/password/orapwhtzxdbpri' file='+ocr/asm/password/orapwASM' asm=y force=y srvctl config db -d htzxdbpri -a srvctl modify db -d htzxdbpri -pwfile '+data/HTZXDBPRI/password/orapwhtzxdbpri' |
解决办法
方法1
把这个参数SEC_CASE_SENSITIVE_LOGON设置为 TRUE.即可恢复正常访问,但密码区分大小写。
1 | alter system set sec_case_sensitive_logon=true sid='*'; |
方法2
如果还是不想区分大小写,那么可以在sqlnet.ora中,增加以下这行: