2011-02-15 1 views
1

내 scenary에 : 나는 다른 데이터베이스를 조회하는 서비스를 개발하기 위해 노력하고다른 방법으로 주변의 데이터베이스 트래픽을 보호하는 방법, 즉 클라이언트에서 서버로, 말을하는 것입니다

.

는 위의 진술을 지우려면 : 데이터베이스 소유자에게 어떤 가치를 제공 할 것입니다 소프트웨어 적 구성 요소 :

  1. 나는 넓은 의미의 단어 서비스를 사용합니다.

  2. 이 데이터베이스는 다른 회사에 속하기 때문에 제 통제하에 있지 않습니다. Oracle, MS (SQL Server), MySql, PostgreSQL 등 여러 벤더를 지원해야합니다. 또한 OLE DB 및 ODBC 연결도 지원됩니다.

문제 : 데이터베이스 자격 증명 및 전체 트래픽의 보안은 큰 문제이지만 구성 노력은 최소한으로 줄여야한다. 이론적으로 모든 보안 문제는 서비스 구현에서 프로그래밍 방식으로 처리되어야하며 유효한 연결 문자열을 제공하는 것 외에 데이터베이스 소유자에게는 구성 작업이 필요하지 않습니다.

일반적으로 데이터베이스 SSL 지원은 클라이언트 (데이터베이스 소유자)에게 번거롭기 때문에 피하고 싶은 서버 인증서를 통해 수행됩니다. 저는 이것을 아무 소용이없는 방법으로 조사했습니다. 다행스럽게도 openssl, SSPI, 클라이언트 SSL 인증서 또는 임의의 형태의 터널링으로 수행 할 수 있습니다. 또는 그것은 단지 명백하지 않을지도 모른다. 약간의 충고는 크게 기피 될 것이다.

답변

0

데이터베이스 트래픽을 보호하려고하기 전에도 데이터베이스 소유자에게이 서비스가 매우 번거롭지 않으면 어떻게 작동하는지 이해하는 데 어려움이 있습니다.

특별히 오라클을 선택하십시오 (다른 데이터베이스와 비슷한 문제가 있다고 가정 함). 서비스가 Oracle 데이터베이스에 액세스하려면 데이터베이스의 소유자가 방화벽에 구멍을 열어서 서버가 특정 포트의 데이터베이스에 액세스 할 수 있도록하여 IP 주소를 알아야합니다. 서버의 모든 통신을 단일 포트에서 수행하는 서비스를 구성해야 할 가능성이 있습니다 (기본적으로 Oracle Listener는 데이터베이스와의 실제 상호 작용을 위해 클라이언트를 다른 포트로 자주 리디렉션합니다)). 보안을 염두에두고 있다면 데이타베이스를 인터넷에 직접 노출하는 대신 서버와 데이터베이스 간의 연결을 프록시하기 위해 별도의 시스템에 Oracle Connection Manager를 설치해야합니다.이는 내부적으로 필요한 구성 작업이며 데이터베이스 계정이 적절한 권한으로 이미 존재하고 모든 사람들이 방화벽 외부에서 데이터베이스 액세스 권한을 부여 받으면 신호를 받았다고 가정합니다.

데이터베이스와의 통신을 암호화하려면 데이터베이스 소유자의 네트워크에 VPN 연결을 설정해야합니다 (방화벽 문제를 일부 제거 할 수 있음) 또는 다음과 같은 것을 사용해야합니다. Oracle Advanced Security는 서버 간의 통신을 암호화합니다. 서로 다른 많은 고객 네트워크에 대한 VPN 연결을 만들려면 잠재적으로 막대한 구성 노력이 필요하며 서로 다른 고객이 서로 호환되지 않는 서로 다른 VPN 소프트웨어 요구 사항을 가지므로 고객 당 하나의 서버를 유지해야 할 수 있습니다. 고급 보안 옵션은 고객이 나가서 구입해야하는 엔터프라이즈 에디션 오라클 라이센스 상단에 추가 비용 라이센스 (저렴한 가격이 아님)입니다. 이 모든 다른 사람들이 뛰어 내렸을 때 적절한 SSL 인증서를 얻는 것에 대해 걱정할 필요가있을뿐입니다. SSL 인증서 교환은 전체 프로세스 중 가장 쉬운 부분처럼 보일 것입니다.

그리고 그것은 단지 오라클을 지원합니다. 다른 데이터베이스에 대한 지원은 비슷한 일련의 단계를 포함하지만 정확한 프로세스는 약간 다른 경향이 있습니다.

난 당신이 더 나은 당신이 해결하려고하는 비즈니스 문제에 따라 제공 될 거라고 기대하는 경향이

, 당신의 고객이에 연결하는 것입니다 그들의 네트워크 내부 자신의 서버에 설치할 수있는 제품을 만들어 데이터베이스를 사용하고 HTTPS POST 호출과 같은 것을 통해 중앙 서버에 데이터를 보내거나 HTTP를 통해 반환 된 결과를 데이터베이스로 보낼 수있는 HTTPS 요청을 수신하는 인터페이스가 필요합니다.

+0

자세한 설명을 주셔서 감사합니다, 저스틴, 그리고 내 대답 지연에 대한 미안. 마지막 단락은 내가 생각한 후에 가져온 내용을 요약 한 것입니다. –

0

클라이언트의 데이터베이스를 안전하게 유지하려면 SSL이 매우 중요합니다. 그러나 그 이상의 것이 있습니다. 각 데이터베이스 계정이 잠겨 있는지 확인해야합니다. 각 클라이언트는 자신의 데이터베이스에만 액세스 할 수 있어야합니다. 더 나아가, 모든 데이터베이스는 더러운 다른 권한을가집니다. 예를 들어, MySQL은 FILE_PRIV을 사용하여 계정에서 파일을 읽고 쓸 수 있습니다. MS-SQL에는 xp_cmdshell이있어 사용자가 sql에서 cmd.exe에 액세스 할 수 있습니다 (왜이 작업을 수행할까요?). PostgreSQL을 사용하면 모든 언어로 저장 프로 시저를 작성할 수 있으며 거기에서 모든 종류의 불쾌한 함수를 호출 할 수 있습니다.

그런 다음 다른 문제가 있습니다. 조작 된 쿼리로 인해 버퍼 오버플로가 발생하여 공격자에게 왕국의 키를 제공 할 수 있습니다. 모든 데이터베이스가 최신 상태인지 확인한 다음 아무도 0 일을 드랍하지 않도록하십시오.

+0

많은 감사, 루크. 내 관심사는 나 소유가 아닌 데이터베이스에 액세스하고 쿼리하는 방법입니다. 내부 보안은 내 책임이 아니지만 내 서비스가 도청을 피하여 안전한 방법으로 dbms에 액세스하고 쿼리하도록 보장해야합니다. –

+0

@Vicente Almagro는 당신이 이미 대답했기 때문에 믿을 수 없을만큼 간단한 질문입니다. 다음에 serverfault에 문의해야합니다. – rook

관련 문제