2012-03-16 2 views
0

우리는 Solaris 11에서 실행되는 C++로 작성된 서버 프로세스와 함께 Oracle 11.2를 사용하고 있습니다. 지원 담당자는 고유 한 Oracle 사용자 이름을 가지고 있으며 Oracle 전용 사용자 우리의 서버 프로세스를 위해 (그것을 servuser라고 부르 자).Oracle에 연결해야하는 서버 프로세스를 안전하게 인증하는 방법

감사를 위해 서버 프로세스에서만 servuser 계정을 사용하여 변경해야하지만 지원 담당자가 servuser를 사용하여 db에 액세스하는 것이 허용됩니다 서버 프로세스를 호스팅하는 Solaris 상자

명백한 해결책은 OS 인증을 사용하는 것입니다. 즉, 프로세스에 대한 Solaris 사용자를 생성하고이를 Oracle servuser에 매핑하십시오. 유일한 문제점 : Oracle 프로세스와는 별도의 호스트에서 실행되는 서버 프로세스. 원격 인증을 사용하는 것은 거대한 잘 알려진 보안 구멍입니다 (OS에서 직접 사용자를 만드십시오 - 사전). 내가 생각할 수있는

다른 모든 전략이 좋은 없습니다 :

  1. 솔라리스 계정에있는 파일에 암호를 저장하는 좋은, 지원 담당자가 볼과 SQLPLUS를 통해 연결하는 데 사용할 수 있기 때문에,하지

  2. 파일을 암호화하면 좋은 없을 것 - 서버 프로세스는 다음의 암호를 해독 할 수 후 지원 직원이 사용할 수있는 개인 키,에 액세스 할 수 있어야 할 것이다 & 우리가 1 단계

    에 돌아온다
  3. 나는 우리가 servuser로 연결하고 있는지 확인하는 로그온 트리거를 생성 한 다음 v $ session의 Module/Program 값이 우리가 유효하다고 식별 한 값과 일치하지 않으면 예외를 발생시키는 것으로 생각했습니다 고객. 누군가가 이러한 가치를 속일 수있는 자체 앱을 작성할 수 있기 때문에 약한 보호 기능입니다.

이 시나리오를 처리하는 "공식적인"방법은 무엇입니까? OS 인증은 인스턴스를 호스팅하는 동일한 상자에서 클라이언트를 실행하는 경우에만 안전하게 작동합니다. 이는 다소 쓸모없는 것처럼 보입니다. IMO. 그러나 우리 시나리오는 매우 일반적이라고 생각할 것입니다. 애플리케이션 서버는 별도의 인스턴스에서 실행되지만 권한있는 계정 만 사용할 수 있습니다.

제안 사항?

답변

0

가장 좋은 옵션은 일반적으로 secure external password store을 사용하는 것입니다. 여기에는 오라클에 연결하는 데 사용할 사용자 이름 & 암호를 저장하는 서버 시스템에 지갑을 만드는 것이 포함됩니다. 지갑에서 자동으로 로그인하게하면 서버 프로세스는 지갑을 열거 나 암호를 볼 필요가 없으며 지원 담당자도 암호를 볼 수 없습니다. 자동 로그인이 서버 시스템에서만 작동하도록 지갑을 구성하여 누군가 다른 시스템으로 지갑을 복사 한 경우 지갑을 더 또는 덜 쓸모 없게 만들 수 있습니다. 물론 조직의 누군가는 저장된 암호를 변경하고자 할 때를 대비하여 지갑 암호를 설정해야하지만 해당 직원이 지원 직원 중 한 명일 필요는 없습니다.

이상한 것은 클라이언트의 사용자 이름과 IP 주소를 검사하고 Solaris 상자가 아닌 다른 시스템 (모듈이나 프로그램을 검사하는 것 외에도)에서 연결이 왔을 경우 로그인을 거부하는 로그인 트리거 일 것입니다. 일반적으로 작동하지만 누군가가 자신의 IP 주소를 스푸핑 할 가능성은 항상 있습니다. 그러나 클라이언트 IP 주소를 스푸핑하고 네트워크의 응용 프로그램 서버처럼 보이게하면 일반적으로 라우팅 문제가 발생하여 공격이 상대적으로 힘들어집니다.

+0

지갑은 컴퓨터의 주어진 OS 사용자에게만 적용 가능합니까? –

+0

@SteveBroberg - Unix 파일 권한을 사용하여 한 명의 Solaris 사용자 만 지갑에 액세스 할 수 있어야합니다. 예. –

+0

고마워요,하지만 누군가가 그 지갑 파일을 가지고 다른 OS 사용자 인 동안 로그인 할 수있을 것 같았습니까? 다른 말로하면, 그것은 servuser로서 db에 들어가기위한 일종의 "pass"역할을합니까? 그렇다면 어떻게 사용자 이름/암호 파일보다 더 좋을까요? –