본문 바로가기

oracle

sysdba 로그인 제한!!

SYSDBA 로그인의 제한

[배경 정보]
"dba" 그룹에 포함된 unix/linux 사용자는 아래와 같은 명령을 이용하여 SYSDBA 권한으로 로그인할 수 있음
sqlplus "/as sysdba"

DBA가 SYS 패스워드를 기억하거나 입력할 필요가 없다는 편의성 때문에 이러한 방법이 자주 사용 됨. 하지만 이로 인한 취약점 또한 존재함
dba 그룹 멤버로 로그인할 수 있는 모든 사용자는 SYS 권한으로 데이터베이스에 로그인할 수 있음
SYS에 아무리 강력한 암호 체계를 적용해도 이는 무용지물과 다름 없음
SYS 계정의 강력한 권한을 보호하려면 dba 그룹이 SYS 계정으로 로그인하면서 SYS 암호를 반드시 입력하도록 하는 것이 좋음
이런 방법으로 외부 침입을 완전히 차단할 수는 없겠지만, 그 위험을 상당 수준 줄일 수 있음

[전략] 
이 프로세스는 SQLNET.ORA 파일의 SQLNET.AUTHENTICATION_SERVICES 매개변수에 의해 통제 됨.
이 매개변수가 NONE으로 설정되었다면, SYSDBA 역할의 자동 로그인 기능은 비활성화 됨.
자동 로그인의 비활성화를 위해 $ORACLE_HOME/network/admin 디렉토리에 위치한 SQLNET.ORA 파일에 아래 라인을 삽입
SQLNET.AUTHENTICATION_SERVICES=(NONE)
(보통은 NAMES.DIRECTORY_PATH= (TNSNAMES)

이제 dba 그룹에 포함된 사용자가 아래와 같은 방법으로 로그인을 시도하면: 
$ sqlplus / as sysdba
다음과 같은 에러를 확인하게 됩니다: 
ERROR: ORA-01031: insufficient privileges

성공적으로 연결하기 위햇는 SYS 패스워드를 함께 입력해야 함
$ sqlplus /nolog 
SQL> connect sys/oracle as sysdba 
이와 같은 방법으로 SYS 패스워드를 알지 못하는 해커가 dba 계정을 이용하여 접근을 시도하는 것을 차단할 수 있음

[주의 사항]
위에서 분명히 확인할 수 있는 것처럼, SYS 패스워드를 명시적으로 입력해야 한다는 사실이 중요합니다. 따라서 SYS 계정으로 연결하는 스크립트에 변경 사항을 적용해 주어야 함.
SYS 패스워드를 분실하더라도 걱정할 필요는 없음. SQLNET.ORA 파일의 라인을 주석 처리하고 이전과 같은 방법(/ as sysdba)으로 로그인할 수 있음

[실행 계획]
IF <스크립트에서 SYS 계정을 이용하여 연결하는 경우> THEN 
   "/ as sysdba"를 "sys/<SysPassword> as sysdba"로 변경합니다. 
   SQLNET.ORA 파일에 "SQLNET.AUTHENTICATION_SERVICES=(NONE)" 설정을 추가
ELSE 
  변경 작업이 불필요합니다. 
END IF





NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

위와같이 EZCONNECT를 넣어주면 더 빨리 되는것 같다~


NAMES.DIRECTORY_PATH 대신에

SQLNET.AUTHENTICATION_SERVICES=(NONE) 이걸 넣으면 sqlplus / as sysdba의 로그인이 제한된다.

'oracle' 카테고리의 다른 글

pl/sql 프로그램에서 사용할 수 있는 문자 집합  (0) 2016.10.14
DBMS_OUTPUT 패키지  (0) 2016.10.14
dbms_metadata set_transform_param  (0) 2016.10.11
dbms_stats.gather_table_stats에 대하여  (0) 2016.10.07
CAST 함수 사용법  (0) 2016.10.07