ORACLE/TroubleShooting2016. 10. 19. 12:01
반응형

이 문서는 sysdba 로 접속하는 중 발생할 수 있는 ORA-1031 또는 ORA-1017 오류에 대한 진단을 위해 사용되는 몇가지 단계에 대해 설명을 목적으로 합니다.

최신 버전에서 인증 실패와 같은 에러는 ORA-01031에서 ORA-01017 로 변경되었습니다. 그래서 이제부터는 모든 인증 실패에 관련해서는 "ORA-01017: invalid username/password; logon denied" 에러 메시지가 보일 것이고, 이미 데이터베이스에 접속이 된 상태에서 발생하는 불충분한 권한으로 인한 오류에 대해서만 ORA-01031에 만나게 될 것입니다.

질문을, 도움말을, 그리고 문서를 통해 당신의 경험을 공유하십시오.

당신은 오라클 고객들과, 오라클 직원들 그리고 업계 전문가들과 함께 이 주제에 대해 토론하고 싶으십니까?

귀하가 질문하고 또는 다른이로 부터 도움을 받을수 있는 그리고 귀하의 경험을 공유할 수 있는 포럼 가입은 여기를 클릭하십시오.
포럼을 통해 많은 주제에 대해 토론과 도움되는 정보를 얻기 위해 오라클 지원 커뮤니티에 접속하기 위해서는 여기를 클릭하십시오.

진단 절차

기본 개념

사용자는 다음의 방법 중 하나를 사용하여 오라클 서버에 SYSDBA 로 접속할 수 있습니다:

OS 인증
암호 파일 인증


사용자는 암호파일(password file) 인증을 통해 원격 시스템으로 부터 SYSDBA 로 데이터베이스에 연결해야만 합니다. 오라클 서버가 윈도우즈에서 실행될 경우 원격에서 SYSDBA 로 연결시 사용자 이름과 암호를 넣지않고 안전하게 연결할 수 있습니다.

오라클 11g 부터 SYSDBA 에 대한 인증방식이 보다 강화 되었습니다. 자세한 사항은 문서 457083.1 를 참고하십시오.




SYSDBA OS 인증

OS 인증은 OS 에 의해 관리되는 정보로 데이터베이스에 연결하는 사용자의 ID 를 확인하는 절차를 거치게 됩니다. OS 사용자는 다음과 같은 조건이 부합될 경우 OS 인증 방법을 사용할 수 있습니다:

1. 사용자가 특정 그룹의 구성원입니다.
2. OS 인증은 서버의 설정(sqlnet.authentication_services가 올바르게 설정되어야 함)을 통해 허용됩니다.

OS 사용자는 sysdba 로 접속하기 위해 반드시 OSDBA 그룹에 소속되어야 합니다. 유닉스의 경우 기본 이름은 dba 입니다. 윈도우즈의 경우 그룹이름은 ORA_DBA 입니다.

유닉스의 경우, sqlnet.authentication_services 값은 반드시 (ALL) 혹은 (BEQ, <other values>) 로 설정되어야 합니다. 윈도우즈의 경우 반드시 (NTS) 로 설정해야 합니다.



SYSDBA 암호 파일 인증


원격에서 SYSDBA 로 접속할 경우 제공된 자격 증명은 암호 파일의 내용을 비교하여 이루어집니다.

암호파일 인증은 데이터베이스 매개 변수인 remote_login_password 의 값이 "shared" 혹은 "exclusive" 인 경우에만 가능합니다.

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;




Note: OS 인증과 암호파일 인증 모두가 가능할 경우 OS 인증이 사용됩니다. 이는 귀하가 사용자이름/암호 조합으로 연결할 수 있음을 의미합니다. 자세한 사항은 <문서 242258.1> 를 참고하십시오.




OS 인증을 사용하여 SYSDBA 접속시 ORA-1031 오류 해결방법.

1. 사용자가 OSDBA 그룹에 소속되어 있는지 확인하십시오.

유닉스의 경우

A. 사용자가 소속된 그룹을 확인하십시오:



[oracle@seclin4 ~]$ id
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba) context=user_u:system_r:unconfined_t




B. $ORACLE_HOME/rdbms/lib/config.[cs] 파일에 정의된 OSDBA 그룹이 무엇인지 확인하십시오.

리눅스의 예제::

[oracle@seclin4 ~]$ cat $ORACLE_HOME/rdbms/lib/config.c

/* SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access. */
/* Refer to the Installation and User's Guide for further information. */

/* IMPORTANT: this file needs to be in sync with
rdbms/src/server/osds/config.c, specifically regarding the
number of elements in the ss_dba_grp array.
*/

#define SS_DBA_GRP "dba"
#define SS_OPER_GRP "dba"
#define SS_ASM_GRP ""

char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};

AIX 의 예제:



[celcaix3]/grdbms/64bit/app/oracle/product/1120/rdbms/lib> cat config.s
# SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access.
# Refer to the Installation and User's Guide for further information.

.rename H.10.NO_SYMBOL{TC},""
.rename H.11.NO_SYMBOL{TC},""
.rename H.12.NO_SYMBOL{TC},""
.rename H.13.NO_SYMBOL{RO},""
.rename H.14.NO_SYMBOL{RO},""
.rename H.15.NO_SYMBOL{RO},""
.rename H.16.ss_dba_grp{TC},"ss_dba_grp"

.lglobl H.13.NO_SYMBOL{RO}
.lglobl H.14.NO_SYMBOL{RO}
.lglobl H.15.NO_SYMBOL{RO}
.globl ss_dba_grp{RW}

# .text section

# .data section

.toc
T.16.ss_dba_grp:
.tc H.16.ss_dba_grp{TC},ss_dba_grp{RW}
T.10.NO_SYMBOL:
.tc H.10.NO_SYMBOL{TC},H.13.NO_SYMBOL{RO}
T.11.NO_SYMBOL:
.tc H.11.NO_SYMBOL{TC},H.14.NO_SYMBOL{RO}
T.12.NO_SYMBOL:
.tc H.12.NO_SYMBOL{TC},H.15.NO_SYMBOL{RO}

.csect ss_dba_grp{RW}, 3
.llong H.13.NO_SYMBOL{RO}
.llong H.14.NO_SYMBOL{RO}
.llong H.15.NO_SYMBOL{RO}
# End csect ss_dba_grp{RW}

.csect H.13.NO_SYMBOL{RO}, 3
.string "dba"
# End csect H.13.NO_SYMBOL{RO}

.csect H.14.NO_SYMBOL{RO}, 3
.string "dba"
# End csect H.14.NO_SYMBOL{RO}

.csect H.15.NO_SYMBOL{RO}, 3
.string ""
# End csect H.15.NO_SYMBOL{RO}
.llong 0x00000000

# .bss section


솔라리스의 예제:



.section ".text",#alloc,#execinstr
/* 0x0000 7 */ .file "x.c"

.section ".data",#alloc,#write
/* 0x0000 9 */ .global ss_dba_grp
/* 0x0000 10 */ .align 8

.global ss_dba_grp
ss_dba_grp:
/* 0x0000 17 */ .align 8
/* 0x0000 18 */ .xword (.L12+0)
/* 0x0004 24 */ .align 8
/* 0x0004 25 */ .xword (.L13+0)
/* 0x0008 26 */ .type ss_dba_grp,#object
/* 0x0008 27 */ .size ss_dba_grp,16

.section ".rodata1",#alloc
/* 0x0008 13 */ .align 8


.L12:
/* 0x0008 15 */ .ascii "dba\0"
/* 0x0014 20 */ .align 8


.L13:
/* 0x0014 22 */ .ascii "dba\0"




위의 예제에서 우리는 사용자가 config.c 파일에서 SS_DBA_GRP 값과 일치한 "dba" 그룹의 구성원임을 확인하였습니다. 만약 그룹이 정상적으로 설정되어 있는 연결에 문제가 있다면 오라클의 그룹 구성원(group membership) 이 올바른지 확인을 위해 문서 67984.1 의 스크립트를 사용하십시오.



NSCD 이슈

OS 인증을 사용한 sysdba 접속시, /etc/passwd 와 /etc/group 로 부터 정보를 캐싱하는 nscd 서비스(/etc/nscd.conf 로 부터 설정됨) 의 문제로 ora-1031 오류가 간혈적으로 발생할 수 있습니다. 만약 이 서비스를 중지할 경우 문제가 해결된다면 OS 공급업체에 문의하시기 바랍니다.



/etc/group 이슈

만약 /etc/group 화일이 어떤 다른 그룹명들을 가지고 있고 이것이 많은 수의 멤버들을 가지고 있어 그 라인의 길이가 길어진다면, OS인증을 사용하는 sysdba로의 접속은 설명하기 어려운 다른 요인으로 인해 어쩌면 실패할 지도 모릅니다, 이 때는 note 13092226.8 에 나와 있는 대안을 참조하십시오.



윈도우즈의 경우

윈도우즈에서 OS 인증을 사용하기 위해서는 OS 사용자는 반드시 아래 두개의 그룹 중 하나의 구성원 이어야 합니다:

ORA_DBA
ORA_<%ORACLE_SID%>_DBA
두번째 그룹의 구성원이 되는 것은 %ORACLE_SID% 로 지정된 인스턴스에 접속시 OS 사용자가 OS 인증을 사용하는 것을 허락합니다.

OS 사용자가 이 두개의 로컬 그룹의 구성원인지 확인하십시오.

OS 사용자의 이름을 가져오기 위해서는:


D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN>echo %username%
dbadmin

로컬 그룹의 구성원 목록을 확인하기 위해서는:


D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN>NET LOCALGROUP ORA_DBA
Alias name ORA_DBA
Comment Members can connect to the Oracle database as a DBA without a password
Members

-------------------------------------------------------------------------------
dbadmin
NT AUTHORITY\SYSTEM
The command completed successfully.





D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN>set oracle_sid=d1v10204

D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN>NET LOCALGROUP ORA_%ORACLE_SID%_DBA
Alias name ORA_d1v10204_DBA
Comment Members can connect to instance d1v10204 as a DBA without a password

Members
-------------------------------------------------------------------------------
dbadmin
The command completed successfully.

만약 사용자가 이 그룹의 구성원이지만 접속시 문제가 발생한다면, 아래 링크를 참고하여 C 프로그램을 컴파일하고 오라클 그룹 구성원 설정이 올바르게 되어 있는지 여부를 확인하기 위해 오라클 실행파일을 다시 수행하십시오:

http://msdn.microsoft.com/en-us/library/aa370655(VS.85).aspx




2. $ORACLE_HOME/network/admin/SQLNET.ORA 에 설정된 SQLNET.AUTHENTICATION_SERVICES 매개변수 값을 확인 하십시오



유닉스의 경우

만약 강력한 인증 방법을 사용하지 않는 경우에 이 매개변수는 설정하지 말아야 합니다. 만약 이 방법이 사용될 경우 아래의 값 중 하나를 매개변수로 설정하십시오:



SQLNET.AUTHENTICATION_SERVICES = (ALL)


or



SQLNET.AUTHENTICATION_SERVICES = (BEQ,<the strong auth method>)

<강력한 인증 방법> 은 다음의 값을 조합할 경우입니다: TCPS, KERBEROS5, RADIUS


NOTE: SQLNET.AUTHENTICATION_SERVICES 의 값에 공백이 선행되면, ORA-1031 가 발생할 수 있습니다.

윈도우즈의 경우

이 매개변수는 NTS 로 설정해야 합니다:



SQLNET.AUTHENTICATION_SERVICES = (NTS)

필요한 경우 귀하는 NTS 옆에 다른 강력한 인증 방식을 추가할 수 있습니다:


SQLNET.AUTHENTICATION_SERVICES = (NTS,TCPS)



Note: 매개변수가 NONE 으로 설정된 경우 OS 인증은 사용할 수 없으며 사용자는 데이터베이스 연결시 유효한 사용자 이름/암호 조합을 제공해야 합니다.

위와 마찬가지로 SQLNET.AUTHENTICATION_SERVICES 의 값에 공백이 선행되면, ORA-1031 가 발생할 수 있습니다.



Note:
윈도우즈에서 OS 인증 방식을 사용하여 sysdba 로 접속할 수 없는 사용자는 도메인 사용자일 수 있습니다. 귀하가 다음의 상황에 부합되는지 확인하십시오:
A) 사용자가 로컬 ora_dba 그룹의 직접적인 구성원인지가 중요합니다. (자세한 내용은 <문서 1065023.1> 참고하십시오.)

B) 오라클 서비스는 반드시 로컬에서 SYSDBA 로 접속할 수 있는 도메인 사용자에 대한 그룹 구성원을 확인할 수 있는 사용자로 기동되어야 합니다. ( 자세한 내용은 <문서 1071638.1> 를 참고하십시오.)

C) 활성화된 디렉토리 서버(Active Directory Server) 와 RDBMS 서버의 시간이 완벽하게 동기화되어 있는지 확인하십시오. 작은 시간의 차이도 윈도우즈에서 기본으로 사용하는 커버로스(KERBEROS) 인증 방식에서 문제가 발생할 수 있습니다.
이러한 경우 ORA-1031 시간 차이로 인해 간혈적으로 발생할 수 있습니다.

D) 오라클 서비스를 기동한 사용자의 이름에 아스키 캐릭터가 아닌 글자(NON ACSII characters) 를 포함하고 있는지 확인하십시오. 자세한 내용은 <문서 1280996.1> 를 참고하십시오.


ORA-12638 는 로컬보다 액티브 디렉토리(Active directory) 를 통해 관리되는 사용자의 경우에 나타납니다.


윈도우즈에서 OS 사용자가 도메인 사용자일때, ORA-12638 가 발생할 수 있습니다. 이 경우 클라이언트단 SQL*Net 추적 파일(trace file) 을 획득하고 naun5authent 함수에 의해 발생하는 MS 윈도우즈 오류가 있는지 확인하는 것이 중요합니다:

A) 클라이언트의 sqlnet.ora 파일에 다음 줄을 추가합니다. (클라이언트는 RDBMS 서버와 동일할 수 있음):


trace_level_client = 16
trace_directory_client = c:\temp\newsqlnet


B) SYSDBA 로 접속을 시도하고 SQL*Net 추적 파일을 획득합니다. 해당 파일을 열어 "SSPI" 문자열을 찾습니다. 귀하는 아래와 비슷한 내요을 확인할 수 있습니다:


[02-OCT-2011 09:21:02:076] naun5authent: SSPI: 0x8009030c error in InitializeSecurityContext
[02-OCT-2011 09:21:02:076] naun5authent: exit
[02-OCT-2011 09:21:02:076] naunauthent: exit
[02-OCT-2011 09:21:02:076] nau_ccn: get credentials function failed
[02-OCT-2011 09:21:02:076] nau_ccn: failed with error 12638
[02-OCT-2011 09:21:02:076] nacomsd: entry
[02-OCT-2011 09:21:02:076] nacomfsd: entry
[02-OCT-2011 09:21:02:076] nacomfsd: exit
[02-OCT-2011 09:21:02:076] nacomsd: exit
[02-OCT-2011 09:21:02:076] nau_ccn: exit
[02-OCT-2011 09:21:02:076] na_csrd: failed with error 12638
[02-OCT-2011 09:21:02:076] na_csrd: exit
[02-OCT-2011 09:21:02:076] nacomer: error 12638 received from authentication service

C) 아래의 링크를 통해 MS 오류를 검색할 수 있습니다. (위 예제의 경우 0x8009030c):

http://technet.microsoft.com/en-us/library/cc786775%28WS.10%29.aspx

D) 윈도우즈 관리자에게 연락하여 마이크로 소프트로부터의 권고 작업을 수행하도록 하십시오. SSPI 오류에 대한 해결책은 다음과 같습니다:

"로그온을 거부합니다. 정책의 범위를 결정할 때 그룹 정책이 컴퓨터와 사용자 모두 해당되도록 합니다.이렇게 하면 컴퓨터 계정은 암호 재설정이 필요하거나 혹은 문제가 발생한 사용자 계정 정보가 필요할 수 있습니다. 사용자 계정이 올바르게 설정되어 있는지 액티브 디렉토리를 확인하십시오. netdom 이나 nltest 와 같은 유틸리티를 사용하여 컴퓨터 계정의 암호를 테스트하십시오."



3. 1단계와 2단계에 따른 구성사항을 확인 후 다음의 문서에 설명된 문제를 검토하십시오:

Note 69642.1 - UNIX: Checklist for Resolving Connect AS SYSDBA Issues
Note 114384.1 - WIN: Checklist for Resolving CONNECT AS SYSDBA (INTERNAL) Issues

4. 위 문서를 참고했음에도 문제가 해결되지 않으면 SR 을 통해 오라클의 지원을 받으시기 바랍니다. SR 을 통한 지원 요청시 다음의 정보를 제공해 주십시오:

유닉스의 경우

A) $ORACLE_HOME/network/admin/sqlnet.ora
B) $ORACLE_HOME/rdbms/lib/config.c(or config.s)
C) "id" 명령어 출력결과
D) 아래 명령 수행 후 출력되는 추적 파일:


Linux:
strace -o /tmp/strace_sysdba.output -cfT sqlplus / as sysdba



AIX, Solaris:
truss -fea -o /tmp/truss_sysdba.output sqlplus / as sysdba



HP-UX:
tusc -afpo /tmp/tusc_sysdba.output -aef sqlplus / as sysdba



윈도우즈의 경우


A) %ORACLE_HOME%/network/admin/sqlnet.ora
B) "echo %username% 과 "NET LOCALGROUP ORA_DBA" 명령 출력 결과
C) 문서 395525.1 과 문서 374116.1 에 따라 문제 재현시 획득한 클라이언트/서버 SQL*Net 추적파일.

암호 파일 인증 사용시 ORA-1031 문제 해결 방법



1.매개변수 remote_login_passwordfile 의 값을 확인하십시오. 이 값은 EXCLUSIVE 혹은 SHARED 로 설정되어야만 합니다:

SQL> show parameter remote_login_passwordfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE

만약 매개변수가 올바르게 설정되어 있지 않다면, 수정 후 데이터베이스를 재시작 하십시오:



SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;


2. 올바른 이름의 암호 파일이 올바른 디렉토리에 존재하는지와 해당 파일의 소유권 및 권한이 올바르게 설정되어 있는지 확인하십시오



유닉스의 경우

암호 파일은 orapw<ORACLE_SID> 형태로 $ORACLE_HOME/dbs 디렉토리에 존재해야만 합니다. 만약 존재하지 않는다면 orapwd 명령어를 사용하여 재생성하십시오.



$ > orapwd file=$ORACLE_HOME/dbs/orapw<sid> password=<password> force=y ignorecase=n
파일의 권한은 아래와 같아야만 합니다:



-rw-r----- 1 oracle oinstall 1536 Jul 21 13:50 orapwdv11201


orapwd 명령어와 관련된 자세한 정보는 <문서 1029539.6> 를 참고하시기 바랍니다.

윈도우즈의 경우

윈도우즈의 경우 암호 파일의 기본 경로는 %ORACLE_HOME%/database 입니다. 암호 파일의 이름은 반드시 pwd<%ORACLE_SID%>.ora 이어야 합니다.
암호 파일 인증을 사용하면 오라클은 아래의 순서에 따라 해당 위치에 암호 파일이 있는지 확인하게 됩니다:

레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HomeXX\ORA_<%ORACLE_SID%>_PWFILE 이 가르키는 폴더
레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HomeXX\ORA_PWFILE 이 가르키는 폴더
기본 경로 (%ORACLE_HOME%/database)


Note: 암호 파일 인증을 설정한다면, 레지스트리 키에 의해 지정된 폴더에 암호 파일이 존재하는지 확인하십시오.




만약 암호 파일이 올바른 위치의 폴더에 존재하지 않으면, orapwd 명령을 사용하여 생성하십시오:



D:\> cd %ORACLE_HOME/database
D:\> orapwd file=pwd<sid>.ora password=<password> force=y nosysdba=n

orapwd 명령어와 관련된 자세한 정보는 <문서 1029539.6> 를 참고하시기 바랍니다.



3. 사용자가 SYSDBA 권한을 부여받았는지 확인하십시오





SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE


만약 사용자가 권한을 부여받지 않았다면, 아래 명령을 수행하십시오:



grant SYSDBA to myadminuser;


myadminuser 는 sysdba 로 접속할 사용자 이름입니다.

4. 데이터 베이스 연결에 사용할 리스너의 설정에 아무런 문제가 없는지 확인하십시오.


리스너 설정에 ORACLE_HOME 매개변수 값이 반드시 올바르게 설정되어야 합니다:



SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = d1v11203)
(ORACLE_HOME = /oracle/product/11203)
(SID_NAME = d1v11203)
)
)


리스너에 정의된 SID 의 경우 ORACLE_SID 로 설정한 인스턴스 이름의 대소문자까지 일치해야만 합니다:



SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = d1v11203)
(ORACLE_HOME = /oracle/product/11203)
(SID_NAME = d1v11203)
)
)






암호 파일 인증시 자주 발생하는 문제들

1) 로드 밸런싱 옵션으로 여러개의 TNS 주소로 맵핑된 TNS 별칭(alias) 을 사용하여 SYSDBA 로 원격 연결시 간혈적으로 ORA-1031 이 발생할 수 있습니다.



TNS 별칭은 tnsnames.ora 파일에 아래와 같이 정의되어 있습니다:

CLIENT_load_balance=
(DESCRIPTION =
(LOAD_BALANCE = yes)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ro-rac1.ro.oracle.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = ro-rac2.ro.oracle.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = service.idc.oracle.com)
)
)


최소 하나의 노드에서 암호 파일이 정상적으로 설정되어 있지 않은 경우, 간혈적으로 해당 오류가 발생할 수 있습니다. 이 경우 모든 노드에 대해 암호 파일이 올바르게 설정되어 있는지 확인하십시오.

2) 아래의 오류와 함께 RMAN 보조 연결(auxiliary connections) 이 실패합니다:

RMAN-04006: error from auxiliary database: ORA-01031: insufficient privileges




RMAN 을 실행하기 전에 원격 보조 데이터베이스에 암호 파일이 올바르게 구성되어 있는지 확인하십시오.

3) EM 설치중 emca_repos_config_yyyy_mm_dd_hh_mm_ss.log 파일에서 아래의 오류가 기록될 수 있습니다:


Caused by: oracle.sysman.emdrep.config.ConfigurationException:
Cannot Create Connection:(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testemconfig.us.oracle.com)(PORT=1553)))(CONNECT_DATA=(SERVICE_NAME=TESTDB)))
SYS
sysdba
ORA-01031: insufficient privileges



이러한 오류는 sqlplus 에서도 재현됩니다:



[oracle@test dbs]$ sqlplus sys/oracle@r01 as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jun 7 16:02:39 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01031: insufficient privileges

이러한 경우, 위에 설명한 대로 귀하는 암호 파일 인증을 통해 sysdba 연결시 발생할 수 있는 오류 해결 방법을 단계별로 수행하여 해결해야 합니다.



반응형
Posted by [PineTree]
ORACLE/TroubleShooting2010. 8. 12. 10:18
반응형

ORA-01031

증상 : sys, system 계정으로 원격접속이 안됨.
DB를 다른 서버로옮기고 확인을 위해 원격접속을 하려고 하면 sys 계정에서
ORA-01031: insufficient privileges
에러가 발생합니다.
sqlplus /nolog
sql> conn
sys/oracle@orcl as sysdba
이런식으로 접근하는데 as sysdba 붙여서 그런지 접속이 되지 않더군요
로컬에서는 잘 되고 다른 일반계정들은 원격접속도 잘 됩니다.
as sysdba를 붙여 로그인 하는 방법은 Oracle의 Password인증방식을 이용한다. 

이때 두가지 경우를 확인하여야 하는데
첫째 : 패스워드 인증방식으로 로그인 할 수 있는 유저확인
둘째 : 패스워드 파일이 잘못되었을 경우

첫번째로 패스워드 인증방식을 쓸수있는 유저가 누구인지 먼저 알아보자.
SQL> select * from v$pwfile_users;
USERNAME                           SYSDB SYSOP
------------------------------ ----- -----
SYS                                     TRUE  TRUE
TEST_USER                           TRUE  FALSE


SYSTEM 계정을 원격으로 접속하기 위해 추가 해본다.
SQL> show user;
USER은 "SYS"입니다

SQL> grant sysdba to system;
권한이 부여되었습니다.

SQL> select * from v$pwfile_users;
USERNAME                           SYSDB SYSOP
------------------------------ ----- -----
SYS                                     TRUE  TRUE
TEST_USER                           TRUE  FALSE
SYSTEM                               TRUE  FALSE

위와 같이 권한을 부여하면 간단하게 SYSTEM 계정으로 원격접속 할 수 있다. 

두번째의 경우는 orapw파일을 이용하여 패스워드를 재설정 하는 방법을 알아보자.
아래의 방법은 정리가 잘되어있는 문서를 인용하겠습니다.
출처는 Oracle Forum Technical Bulletin 의 문서를 인용하였습니다.

AS SYSDBA로 접속할때 PASSWORD 걸기
============================

PURPOSE
-------
AS SYSDBA로 접속할 때 PASSWORD 설정하는 방법

Explanation
-----------
오라클 9i에서는 internal로 접속을 하였을 때 ORA-09275: CONNECT INTERNAL is not a valid DBA connection 를 경험할 수 있다.
오라클 9i 서버에서는 connect internal을 사용하지도 않고, as sysdba와 as sysoper로 logon하여 DATABASE를 구동할 수 있다.

여기서 다루고자 하는 것은 Platform에 관계없이 oracle dba group이라면 기존에는 password를 점검하지 않고 사용할 수 있었다.
그러나, 여러가지 보안상의 이유로 password를 걸었을 때 ORA-01031: insufficient privileges와 같은 message나, password를 묻지않고 bypass하는 경우를 알아보고자 한다.

<Note> 9i에서는 svrmgrl command가 없어 졌으며 sqlplus internal도 사용할 수 없다.

Explanation
-----------
1. OS 및 Platform에 관계없이 $ORACLE_HOME/dbs 디렉토리에서 오라클사용자로 orapwd tool을 사용하여 password file을 생성한다.
기존에 password file이 존재한다면 password 파일을 Remove 또는 rename하여 별도로 보관하여도 된다.

Usage: orapwd file=<fname> password=<password> entries=<users>

where
file - name of password file (mand),
password - password for SYS and INTERNAL (mand),
entries - maximum number of distinct DBA and OPERs (opt),
There are no spaces around the equal-to (=) character.

$orapwd file=orapw<SID> password=[password]
$orapwd file=orapw<SID> password=[password] entries=10
<Note> 위와 같이 하였을때 생성된 password 파일의 크기는 차이기 있을수 있다.
2. init.ora를 사용하는 경우init<SID>.ora file를 편집기로 open한 다음 아래처럼 기술한다.
대소문자의 구분은 없습니다.
REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE
3. spfile을 사용하는 경우 아래의 절차처럼 dynamic하게 변경하여 주어야 한다.
SQL> show parameter spfile
NAME TYPE VALUE
---------- ---------- ---------
spfile string
?/dbs/spfile@.ora

SQL
> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ---------------
remote_archive_enable boolean TRUE
remote_dependencies_mode string TIMESTAMP
remote_listener string
remote_login_passwordfile string
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile ;
System altered.

SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------
spfile string
?/dbs/spfile@.ora

SQL
> show parameter remote
NAME TYPE VALUE
------------------------------------ ----------- ---------------
remote_archive_enable boolean TRUE
remote_dependencies_mode string TIMESTAMP
remote_listener string
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE

4. SQLNET.ORA 파일 편집.
password를 설정하기 위해서는 반드시 아래와 같이 sqlnet.ora 파일을 에디터로 open한 다음 아래처럼 기술하여야 한다.

$ echo $TNS_ADMIN
/d02/rctest/app/oracle/product/9.0.1/networ/admin

SQLNET.AUTHENTICATION_SERVICES = (NONE)

5. 위와 같은 작업을 순서대로 하였고 password를 정상적으로 입력하였는데도 logon이 되지 않는다면 1031, 00000, "insufficient privileges" 같은 message가 계속 나타난다면 orapwd를 password와 sys user의 password가 일치하는지를 확인한 다음 sqlplus로 접속하여야지만 아래처럼 정상적으로 logon를 할 수 있다.

Example
-------
[ora9i:/d02/rctest]sqlplus "/as sysdba"
SQL*Plus: Release 9.0.0.0.0 - Beta on Thu May 30 10:55:46 2002 (c) Copyright 2001 Oracle Corporation. All rights reserved.

ERROR:
ORA-01031: insufficient privileges

Enter user-name: sys
Enter password: ----> password와 as sysdba 를 함께 입력

Connected to:
Oracle9i Enterprise Edition Release 9.0.0.0.0 - Beta
With the Partitioning option
JServer Release 9.0.0.0.0 - Beta

SQL>
[ora9i:/d02/rctest]sqlplus /nolog
SQL*Plus: Release 9.0.0.0.0 - Beta on Thu May 30 10:57:45 2002 (c) Copyright 2001 Oracle Corporation. All rights reserved.

SQL> connect sys/manager
ERROR: ORA-28009: connection to sys should be as sysdba or sysoper

SQL> connect sys/manager as sysdba
Connected.
SQL>

출처 : http://www.function.kr/tc/59
반응형
Posted by [PineTree]