본문 바로가기
Oracle/이벤트

[12c이상DB접속시도] Ora-28040,Ora-01017 해결

by 취미툰 2021. 6. 8.
반응형

10g 운영중인 서버에서 12c 서버로 DB link를 연결할 작업이 있어 작업을 하다가  해결한 부분을 정리한 것입니다.

해당 에러의 원인은 12c부터 발생하는 이슈로 SQLNET.ALLOWED_LOG_VERSION 파라미터의 디폴트 값이 11로 변경이 되면서 부터입니다.

 

요약
12c 이상 DB에 접속하고 싶은데 클라이언트 버전이 낮아 해당 에러가 발생하였다면?

1.12c이상 DB SQLNET.ORA 수정 후 리스너 재기동
2.유저 설정 수정을 통하여 PASSWORD_VERSIONS 바꾸기

 

아래는 에러를 해결하는 과정과 함께 설명을 같이 해놓았습니다. 

 

 

1차 접속시도

ORA-28040 : No matching authentication protocol

 

원인 : client 버전 보다 높은 DB에 접속하기 위해 나는 에러

간단하게 요약하면 12c 서버쪽에 SQLNET.ORA 파일에 아래 내용 추가 후 서버측 리스너를 재기동하면 됩니다.

해당 파라미터는 9i이상의 접속을 허용한다는 뜻입니다.

조치 : 

SQLNET.ALLOWED_LOGON_VERSION_SERVER=9 ##유저 패스워드 방식을 서버단에서 변경을 준비
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=9 ## 클라이언트 버전이 낮아도 접속을 허용

 

해당 이슈와 관련된 글은 아래의 포스팅에 정리하였으므로 아래 글을 확인하시고 조치하면 됩니다.

2020.01.02 - [Oracle/이벤트] - ORA-28040 : No matching authentication protocol

https://bae9086.tistory.com/38

 

ORA-28040 : No matching authentication protocol

원인 : client 버전 보다 높은 DB에 접속하기 위해 나는 에러 (저는 19c DB에 접속하기 위해 11g client 프로그램을 이용할 때 발생하였습니다.) SQL>sqlplus scott/tiger@orcl19c_1.200 SQL*Plus: Release 11.2..

bae9086.tistory.com

 

2차 접속시도

위의 에러를 해결하고 다시 접속을 시도하니 아래와 같은 에러가 발생합니다.

ORA-01017: invalid username/password; login denied

 

원인 : sqlnet.ora 설정 전에 USER 생성이 된 경우 발생합니다.(PASSWORD_VERSION 차이)

 

원인에 대해서는 자세하게 확인해가며 정리하겠습니다.

 

우선 기본적으로 12c에서 기본설정(파라미터 건드리지 않고 사용)을 확인해보면 아래와 같습니다.

dba_users 뷰를 확인해보면 password_versions에 11g 12c가 기본적으로 설정되어 있습니다.

11g에서 같은 테이블을 조회해보면 10g 11g라고 기본적으로 설정이 되어 있는데, 이 차이의 변경으로 인해서 12c 이후부터는 기본설정으로는 이전 client에서 접속이 안되는 것입니다. 따라서 12c에서도 11g에서 처럼 password_versions에 10g까지 표시되도록 변경해줄 필요가 있습니다.

 

SQL> select username,account_Status,password_Versions From dba_users
where username='유저명';

USERNAME          ACCOUNT_STATUS                   PASSWORD_VERSIONS                  
----------------- -------------------------------- ---------------------------------- 
유저명          OPEN                             11G 12C   

...생략

 

조치 : alter user 유저명 identified by 패스워드 account unlock;

조치는 간단합니다. 1번의 SQLNET.ORA 파라미터 조치 후 유저를 다시 생성하면 PASSWORD_VERSIONS값이 변경됩니다. 기존에 생성된 유저라면 alter 명령문을 이용해 동일한 패스워드로 패스워드 변경을 해서 USER에 변경을 주면 됩니다.

 

SQL>alter user 유저명 identified by 패스워드명 account unlock;

 

다시 DBA_USERS뷰로 확인해보명 PASSWORD_VERSIONS값이 10G 11G 12C로 변경된 것을 확인할 수 있습니다. 변경하지 않은 유저는 아직까지 PASSWORD_VERSIONS이 11G 12C인것을 확인할 수 있습니다.

SQL> select username,account_Status,password_Versions From dba_users
where username='유저명';

USERNAME          ACCOUNT_STATUS                   PASSWORD_VERSIONS                  
----------------- -------------------------------- ---------------------------------- 
유저명          OPEN                             10G 11G 12C        
SYSTEM          OPEN                                11G 12C     

...생략

 

후에 다시 접속을 시도해보면 잘 되는것을 확인할 수 있습니다.

 

CMD>sqlplus 유저명/패스워드명@ISDD

SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jun 7 10:24:46 2021

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

SQL> exit
Disconnected from Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

 

+)추가 사항

11g이상에서 부터 생긴 파라미터인데 대소문자 구분 허용/불가 파라미터입니다. default는 TRUE로 허용인데 대소문자를 구분한다는 뜻이므로 로그인시 불편함이 있을 수 있습니다. 따라서 FALSE로 바꾸고 사용한다면 좀더 편하게 사용할 수 있을 것입니다.

 

명령어 : alter system set sec_case_sensitive_logon =false scope=BOTH;

SQL> show parameter sensitive

NAME                                 TYPE		VALUE
------------------------------------ ----------------------
sec_case_sensitive_logon             boolean	TRUE

SQL> alter system set sec_case_sensitive_logon =false scope=BOTH;



SQL> show parameter sensitive

NAME                                 TYPE		VALUE
------------------------------------ ----------------------
sec_case_sensitive_logon             boolean	FALSE

 

 

 

반응형

댓글