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하는 경우를 알아보고자 한다.
9i에서는 svrmgrl command가 없어 졌으며 sqlplus internal도 사용할 수 없다.
Explanation
-----------
1. OS 및 Platform에 관계없이 $ORACLE_HOME/dbs 디렉토리에서 오라클사용자로 orapwd tool을 사용하여 password file을 생성한다.
기존에 password file이 존재한다면 password 파일을 Remove 또는 rename하여 별도로 보관하여도 된다.
Usage: orapwd file= password= entries=
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 password=[password]
$orapwd file=orapw password=[password] entries=10
위와 같이 하였을때 생성된 password 파일의 크기는 차이기 있을수 있다.
2. init.ora를 사용하는 경우init.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>
'DBMS > Oracle' 카테고리의 다른 글
RAC를 single instance로 바꾸기 (0) | 2020.01.16 |
---|---|
10g이상 지원 shrink할 대상 찾는 function (0) | 2020.01.16 |
Oracle EM 수동구성 (0) | 2020.01.16 |
ORA-4031 ERROR 실제 사례의 분석(SHARED POOL) (0) | 2020.01.16 |
Oracle 아카이브로그 정리 또는 리스너 로그 정리 스크립트 (0) | 2019.08.29 |