오라클 데이터베이스를 기동(STARTUP)하고, 종료(SHUTDOWN)하기 위해서는 SYSDBA, 혹은 SYSOPER 권한이 필요하다. 또한 이러한 권한을 갖는 계정들로 로그인 하기 위해서는 특별한 인증 절차가 필요한데, OS 인증 방식과 패스워드 파일 인증방식이 바로 그러한 인증 절차가 된다.
OS 인증 방식은 로컬 시스템에서 오라클에 접속할 때에만 사용이 가능하다. DBMS 설치시에 지정해준 OS 그룹에 속해있는 OS 계정이라면 as SYSDBA나 as SYSOPER 옵션을 사용 가능하게 된다. 옵션 사용이 가능할 뿐만 아니라 아래와 같이 계정명이나 패스워드를 넣지 않아도 SYSDBA권한으로의 접근이 가능하게 된다.

[oracle@minhang2 ~]$ groups
oinstall dba oper asmadmin
[oracle@minhang2 ~]$ sqlplus / AS sysdba
SQL*Plus: RELEASE 11.2.0.1.0 Production ON Mon Jan 30 10:45:47 2012
Copyright (c) 1982, 2009, Oracle. ALL rights reserved.

Connected TO:
Oracle DATABASE 11g Enterprise Edition RELEASE 11.2.0.1.0 - 64bit Production
WITH the Partitioning, OLAP, Data Mining AND REAL Application Testing options
sys@OMS> show USER
USER IS "SYS"
sys@OMS>


만약 다른 시스템에서 TNS를 통해 접근을 할 때에, 위와 같이 계정명과 암호를 넣지 않고 OS 인증 방식으로 접근하려 한다면 아래와 같이 권한이 불충분하다는 에러가 발생하게 된다.

[oracle@localhost ~]$ sqlplus /@oms AS sysdba
SQL*Plus: RELEASE 10.2.0.5.0 - Production ON Mon Jan 30 10:48:56 2012
Copyright (c) 1982, 2010, Oracle. ALL Rights Reserved.
ERROR:
ORA-01031: 권한이 불충분합니다

Enter user-name:

 

원격지에서는 OS 인증 방식을 사용할 수 없으므로, 이런 때에는 패스워드 파일 인증 방식을 사용해야 한다. 우선 이 패스워드 파일 설정 부분은 교재대로 진행이 불가능할 것이다. 책 내용과 달리 REMOTE_LOGIN_PASSWORDFILE 파라메터의 디폴트값이 10g R2 부터는 Shared로, 11g 부터는 Exclusive로 변경 되었기 때문이다.

sys@OMS> show parameter remote_lo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
sys@OMS>

 

따라서 위에서처럼 OS인증 방식을 사용하려 한다면 SYSDBA로 로그인되지 않겠지만, 이미 패스워드 파일을 사용하게끔 설정이 되어 있으므로, 계정과 암호만 입력해준다면 SYSDBA로 로그인할 수 있다.

[oracle@localhost ~]$ sqlplus /@oms AS sysdba
SQL*Plus: RELEASE 10.2.0.5.0 - Production ON Mon Jan 30 12:10:11 2012
Copyright (c) 1982, 2010, Oracle. ALL Rights Reserved.
ERROR:
ORA-01031: 권한이 불충분합니다

Enter user-name: 
ERROR:
ORA-01017: invalid username/password; logon denied

Enter user-name: 
ERROR:
ORA-01017: invalid username/password; logon denied

SP2-0157: unable TO CONNECT TO ORACLE after 3 attempts, exiting SQL*Plus
[oracle@localhost ~]$ sqlplus sys/oracle@oms AS sysdba
SQL*Plus: RELEASE 10.2.0.5.0 - Production ON Mon Jan 30 12:11:00 2012
Copyright (c) 1982, 2010, Oracle. ALL Rights Reserved.

Connected TO:
Oracle DATABASE 11g Enterprise Edition RELEASE 11.2.0.1.0 - 64bit Production
WITH the Partitioning, OLAP, Data Mining AND REAL Application Testing options
sys@OMS> show USER
USER IS "SYS"
sys@OMS>

 

 

REMOTE_LOGIN_PASSWORDFILE 파라메터는 동적으로 변경되지 않는 파라메터로, DB를 새로 기동할 시에만 변경 사항을 적용시킬 수 있다. SPFILE을 사용하고 있다면 SCOPE=SPFILE로 지정해주어야 한다. 그리고 DB를 재기동하면 파라메터 파일을 다시 읽어들이면서 변경된 값으로 재적용되게 된다.

sys@OMS> ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE;
ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE
*
ERROR AT line 1:
ORA-02095: specified initialization parameter cannot be modified

sys@OMS> ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE scope=spfile;
SYSTEM altered.
sys@OMS>

 

 

해당 파라메터에 설정 가능한 값중 NONE은 파라메터 파일을 사용하지 않겠다는 의미이며, SHARED는 패스워드 파일을 범용으로 사용하여 하나 이상의 DB가 하나의 패스워드 파일을 이용할 수 있는 방식이다. 마지막으로 EXCLUSIVE는 범용이 아닌 하나의 DB 전용으로 하나의 패스워드 파일을 사용하겠다는 의미이다.

패스워드 파일의 기본 경로는 $ORACLE_HOME/dbs, 파일명은 orapw$ORACLE_SID 이다. 처음으로 패스워드 파일을 사용하겠다고 설정했다면, 파라메터만 설정되어있을 뿐 실제 패스워드 파일은 존재하지 않는 상태이다. 이때 orapwd 명령어를 통해 패스워드 파일을 생성해줄 수 있다.

[oracle@minhang2 ~]$ orapwd
Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>
where
file - name of password file (required),
password - password for SYS will be prompted if not specified at command line,
entries - maximum number of distinct DBA (optional),
force - whether to overwrite existing file (optional),
ignorecase - passwords are case-insensitive (optional),
nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).

There must be no spaces around the equal-to (=) character.
[oracle@minhang2 ~]$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID
Enter password for SYS: 
[oracle@minhang2 ~]$

 


해당 패스워드 파일에 등록된 DB 계정 정보는 아래의 뷰를 통해 확인이 가능하며, SYSDBA나 SYSOPER 권한을 grant해주는 경우 자동으로 패스워드 파일에 해당 계정 정보가 추가되게 된다.

sys@OMS> SELECT * FROM v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
sys@OMS> GRANT sysdba TO minhang;
GRANT succeeded.
sys@OMS> SELECT * FROM v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
MINHANG TRUE FALSE FALSE
sys@OMS> GRANT sysoper TO minhang;
GRANT succeeded.
sys@OMS> SELECT * FROM v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
MINHANG TRUE TRUE FALSE
sys@OMS> REVOKE sysdba,sysoper FROM minhang;
REVOKE succeeded.
sys@OMS> SELECT * FROM v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE

 


DB상에 SYSDBA, SYSOPER 권한을 소유한 계정이 아무리 많더라고, 처음 패스워드 파일을 생성한 직후에는 SYS계정만이 패스워드 파일에 들어가게된다. 따라서 패스워드 파일에 다른 계정 정보도 추가해주고자 한다면 해당 계정에 대해 다시 한번 GRANT 명령을 실행해주어야 한다.

레이블 (0)

  • 레이블 없음
댓글 쓰기...

첨부 파일  (0)

첨부 파일 추가하기
공유된 파일이 아직 없습니다.