ORA-01017: sqlplus / as sysdba 명령으로 접속이 안될 때 오류 해결하기

Oracle DB

ORA-01017 오류는 다음의 3가지의 설정 내용과 Oracle Database Instance에 접속 방식이 일치 하지 않아서 발생하는 오류입니다. 이 글에서는 설정 내용과 접속 방식의 잘못된 조합의 예를 들어 설명하고 어울리는 조합을 제시해서 오류를 해결하는 방법을 소개하겠습니다.

  1. sqlnet.ora의SQLNET.AUTHENTICATION_SERVICES 항목의 설정 값이 NONE 이거나 NTS
    NTS : Oracle Database Instance에 접속 허가를 요구할 때 DB서버의 Windows 운영 체제 사용자로 인증 하는 방식
    NONE : Oracle Database Instance에 접속 허가를 요구할 때 Oracle 사용자로 인증 하는 방식
  2. Oracle 서버와 sqlplus클라이언트를 동일 머신 실행 이거나 다른 머신 실행
  3. linux OS 로그인 user가 dba그룹 소속 이거나 아님 또는 Windows OS 로그인 user가 ora_dba그룹 소속 이거나 아님

작업 환경

이 글은 DB서버의 Oracle Database InstanceOracle Client의 sqlplus가 다음과 같이 동일 환경에서 작업하는 것을 전제 조건으로 작성했습니다.

직접 DB서버 환경에서 로컬 접속하는 경우

ora_dba그룹 소속 아닌 사용자로 NTS인증

실행 전제 조건

  1. Oracle Database Instance가 기동하고 있는 DB서버의 운영 체제(이 글에서는 Windows OS)에 로그인 해서 작업 합니다.
  2. sqlnet.ora는SQLNET.AUTHENTICATION_SERVICES=NTS 값으로 설정합니다. 이 설정은 Oracle데이터베이스의 기본 ORCL Instance가 작성 되었을 때의 기본 값 입니다.
  1. 다음 화면과 같이 Oracle관리자 그룹 ora_dba그룹 속하지 않은 Windows사용자user01로 Windows에 로그인 합니다.
1.[Windows 로고 키+R] -> [실행] 창 -> compmgmt.msc 명령을 입력 후 [확인]버튼 클릭
2.컴퓨터 관리 왼쪽 메뉴의 [컴퓨터 관리(로컬)] – 시스템 도구 – 로컬 사용자 및 그룹 – 사용자 를 선택
3.표시된 오른쪽 창의 사용자 목록에서 사용자 user01가 ora_dba그룹에 속하지 않는 것을 확인

실행 결과(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그룹을 지정해 줍니다.

주의 사항)이 변경은 관리자 권한을 가지고 있는 Windows 사용자로 로그인 해야 합니다.

이렇게 변경 하면 다음과 같이 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)접속

실행 전제 조건

  1. Oracle Database Instance가 기동하고 있는 DB서버 환경에 로그인 해서 작업 합니다.
  2. 다음과 같은 Oracle관리자 그룹에 속한 OS(운영 체제) 사용자로 로그인
    • Linux경우는 dba그룹
    • Windows경우는 ora_dba그룹
  3. sqlnet.ora는SQLNET.AUTHENTICATION_SERVICES=NONE 값으로 변경 또는 동일한 결과를 내기 위해 SQLNET.AUTHENTICATION_SERVICES설정 행을 삭제합니다. 미 설정인 경우 기본 설정은 NONE입니다..
(Linux의 예)
(Windows의 예)

실행 결과(설정은 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서버에 접속 할 수 있는지는 다음 글을 참조하십시오

sqlplus / as sysdba 명령은 클라이언트 환경에서 원격 접속으로 사용할 수 있을까?
sqlplus / as sysdba 명령은 Oracle Database Instance가 설치된 DB서버의 Windows OS의 사용자 인증 정보를 사용해서 접속하는 명령이기 때문에 이를 사용 할 수 없는 클라이언트...
제목과 URL을 복사했습니다