ORA-01017 오류는 다음의 3가지의 설정 내용과 Oracle Database Instance에 접속 방식이 일치 하지 않아서 발생하는 오류입니다. 이 글에서는 설정 내용과 접속 방식의 잘못된 조합의 예를 들어 설명하고 어울리는 조합을 제시해서 오류를 해결하는 방법을 소개하겠습니다.
- sqlnet.ora의SQLNET.AUTHENTICATION_SERVICES 항목의 설정 값이 NONE 이거나 NTS
NTS : Oracle Database Instance에 접속 허가를 요구할 때 DB서버의 Windows 운영 체제 사용자로 인증 하는 방식
NONE : Oracle Database Instance에 접속 허가를 요구할 때 Oracle 사용자로 인증 하는 방식 - Oracle 서버와 sqlplus클라이언트를 동일 머신 실행 이거나 다른 머신 실행
- linux OS 로그인 user가 dba그룹 소속 이거나 아님 또는 Windows OS 로그인 user가 ora_dba그룹 소속 이거나 아님
작업 환경
- DB서버 Windows컴퓨터(“Oracle Database 12.2.0.1.0 for Microsoft Windows x64 설치 하기“글에서 설치한 환경)
- OS : Widows Server 2012 R2
- IP Address(예) : 192.168.220.132
ora_dba그룹 소속 아닌 사용자로 NTS인증
실행 전제 조건
- Oracle Database Instance가 기동하고 있는 DB서버의 운영 체제(이 글에서는 Windows OS)에 로그인 해서 작업 합니다.
- sqlnet.ora는SQLNET.AUTHENTICATION_SERVICES=NTS 값으로 설정합니다. 이 설정은 Oracle데이터베이스의 기본 ORCL Instance가 작성 되었을 때의 기본 값 입니다.
- 기본 값에 대해서는 “Oracle Database 12.2.0.1.0 for Microsoft Windows x64 설치 하기” 글을 참조하십시오.
- 다음 화면과 같이 Oracle관리자 그룹 ora_dba그룹에 속하지 않은 Windows사용자user01로 Windows에 로그인 합니다.
실행 결과(ORA-01017 오류 발생)
위의 실행 전제 조건에서 다음과 같이 NTS인증을 위해 Oracle 사용자를 지정하지 않는 “sqlplus / as sysdba“명령으로 Oracle Instance 접속 했을 때 ORA-01017 에러가 발생하는 것을 확인할 수 있습니다.
C:\Users\user01>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 화 2월 2 01:15:33 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
ERROR:
ORA-01017: 사용자명/비밀번호가 부적합, 로그온할 수 없습니다.
사용자명 입력:
오류 해결 방법(Oracle사용자 인증 방식으로 접속)
위의 실행 전제 조건의 변경이 필요 없는 가장 간단한 방법으로는 비록 SQLNET.AUTHENTICATION_SERVICES에 Windows 사용자 인증 방식인 NTS값을 지정 했더라도 Oracle사용자 인증 방식으로 접속 할 수 있습니다.
C:\Users\user01>sqlplus sys/******** as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 화 2월 2 01:35:06 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL>
오류 해결 방법(ora_dba그룹 소속 사용자로 로그인)
하지만 근본적 해결을 원한다면 Windows 사용자 인증 방식 NTS는 Windows사용자가 ora_dba그룹에 속해야 효력을 낼 수 있습니다. 위의 실행 전제 조건의 “3.”의 설정을 변경하는 방법으로 다음과 같이 ora_dba그룹을 지정해 줍니다.
이렇게 변경 하면 다음과 같이 Oracle 사용자 인증 방식으로 접속 하지 않아도 sysdba권한으로 Oracle Database Instance에 접속할 수 있습니다.
C:\Users\user01>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 화 2월 2 01:45:34 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL>
Oracle사용자 인증(NONE) 설정으로 OS 인증(NTS)접속
실행 전제 조건
- Oracle Database Instance가 기동하고 있는 DB서버 환경에 로그인 해서 작업 합니다.
- 다음과 같은 Oracle관리자 그룹에 속한 OS(운영 체제) 사용자로 로그인
- Linux경우는 dba그룹
- Windows경우는 ora_dba그룹
- sqlnet.ora는SQLNET.AUTHENTICATION_SERVICES=NONE 값으로 변경 또는 동일한 결과를 내기 위해 SQLNET.AUTHENTICATION_SERVICES설정 행을 삭제합니다. 미 설정인 경우 기본 설정은 NONE입니다..
실행 결과(설정은 NONE이지만 NTS방식으로 인증)
(Linux 예)
DB서버의 sqlnet.ora가 위의 실행 전제 조건 “3.”과 같이 Oracle 사용자로 인증 하는 방식(NONE) 설정되어 있다면 DB서버에서 NTS인증을 위해 Oracle 사용자를 지정하지 않는”sqlplus / as sysdba” 명령으로 접속 할 경우 다음과 같은 에러가 발생합니다.
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Thu Jan 28 12:49:37 2021
Copyright (c) 1982, 2014, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
(Windows 예)
Windows OS버전의 Oracle 데이터베이스에서도 Linux OS버전과 동일한 에러가 발생합니다.
C:\>sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on 월 2월 1 18:02:20 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
ERROR:
ORA-01017: 사용자명/비밀번호가 부적합, 로그온할 수 없습니다.
사용자명 입력:
위의 에러 메시지는 Oracle관리자 그룹에 속한 OS(운영 체제) 사용자 임에도 불구하고 자주 경험하는 에러입니다.
오류 해결 방법(NONE은Oracle 사용자 인증 방식으로 접속)
SQLNET.AUTHENTICATION_SERVICES= (NONE)의 설정은 오직 “sqlplus sys/******** as sysdba” 명령과 같이 사용자ID, 패스워드를 지정해서 접속 해야만 Oracle Database Instance에 접속이 가능합니다. 바른 접속하는 방법은 다음과 같습니다.
[oracle@localhost ~]$ sqlplus sys/******** as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Thu Jan 28 13:00:03 2021
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
요약
NONE은 Oracle 사용자 인증 정보를 이용하겠다는 의미입니다. 이 경우 ora_dba그룹에 소속된 Windows 사용자의 인증 정보를 이용하지 않기 때문에 “sqlplus sys/password as sysdba” 명령처럼 반드시 sysdba권한을 소유한 Oracle사용자의 아이디와 패스워드를 지정해 주어야 합니다.
NTS는 Oracle Database Instance가 설치된 Windows OS의 사용자 인증 정보를 이용하겠다는 의미입니다. 이 경우 sysdba권한을 소유한 Oracle사용자의 아이디와 패스워드는 필요 없기 때문에 “sqlplus / as sysdba” 명령처럼 사용자ID와 패스워드는 생략해야 합니다. 또한 다음 조건이 충족된 환경에서만 사용할 수 있습니다.
1. 실제 DB가 위치한 서버 환경에서 작업할 것.
2. 현재 OS에 로그인 된 사용자가 ORA_DBA 그룹에 소속 되어있을 것.
3. sqlplus.ora 에 SQLNET.AUTHENTICATION_SERVICES= (NTS) 가 정의되어있을 것
클라이언트에서 sqlplus / as sysdba명령으로 DB서버에 접속 하기
위의 글은 로컬 접속의 sqlplus / as sysdba명령에 대해 소개했습니다. 반대로 원격 접속의 클라이언트 컴퓨터에서 sqlplus / as sysdba명령을 사용해서 DB서버에 접속 할 수 있는지는 다음 글을 참조하십시오