Programing

데이터베이스와 웹 서버를 같은 머신에 두지 않는 것이 왜 바람직하지 않습니까?

lottogame 2020. 7. 18. 10:27
반응형

데이터베이스와 웹 서버를 같은 머신에 두지 않는 것이 왜 바람직하지 않습니까?


Scott Hanselman의 Stack Overflow 팀 ( 1 부2 부 ) 의 인터뷰를 듣고 그는 SQL 서버와 응용 프로그램 서버가 별도의 컴퓨터에 있어야한다는 것을 강력히 확신했습니다. 이것은 하나의 서버가 손상된 경우 두 시스템 모두에 액세스 할 수 없도록하기위한 것입니까? 보안 문제가 두 서버의 복잡성 (추가 비용, 두 서버 간 전용 네트워크 연결, 유지 관리 등), 특히 CPU 나 메모리를 너무 많이 사용하지 않는 소규모 응용 프로그램의 경우보다 중요합니까? 한 대의 서버가 손상된 두 대의 서버를 사용하더라도 공격자는 데이터베이스를 삭제하거나 응용 프로그램 코드를 망쳐 서 심각한 피해를 입을 수 있습니다.

성능이 문제가되지 않는 이유는 무엇입니까?


  1. 보안. 귀하의 웹 서버는 DMZ에 있으며 공용 인터넷에 액세스 할 수 있으며 익명 사용자의 신뢰할 수없는 입력을받습니다. 웹 서버가 손상되어 DB에 연결하는 데 최소 권한 규칙을 따랐다면 데이터베이스 API를 통해 앱이 할 수있는 것이 최대 노출입니다. 그 사이에 비즈니스 계층이있는 경우 공격자와 데이터 사이에 한 단계 더 있습니다. 반면에 데이터베이스가 동일한 서버에있는 경우 공격자는 이제 데이터와 서버에 대한 루트 액세스 권한을 갖습니다.
  2. 확장 성. 웹 서버를 상태 비 저장 상태로 유지하면 웹 서버를 거의 수평 적으로 쉽게 확장 할 수 있습니다. 데이터베이스 서버를 수평으로 확장하는 것은 매우 어렵습니다.
  3. 공연. 2 개의 상자 = CPU의 2 배, RAM의 2 배, 디스크 액세스를위한 스핀들의 2 배.

말한대로, 나는 그 요점이 실제로 중요하지 않은 합리적인 사례를 확실히 볼 수 있습니다.


실제로는 중요 하지 않습니다 (동일한 컴퓨터에서 웹 / 데이터베이스를 사용하여 사이트를 행복하게 운영 할 수 있음).

StackOverflow는 IIS / SQL Server를 실행하는 단일 컴퓨터에서 시작하여 정확히로드 된 후 두 번째 서버를 구입하여 SQL Server를 그 서버로 옮겼습니다.

성능이 문제가되지 않으면 두 대의 서버를 구매 / 유지 관리하는 비용을 낭비하지 마십시오.


반면에 다른 블로그 스콧 (Telligent의 Watermasyck)을 참조하면 대부분의 사용자는 데이터베이스를 웹 사이트와 동일한 컴퓨터에 배치하여 (Telligent의 커뮤니티 서버를 사용하여) 웹 사이트 속도를 높일 수 있다는 것을 알았습니다. 그러나 고객의 경우 일반적으로 db & 웹 서버는 해당 시스템의 유일한 응용 프로그램이며 웹 사이트는 시스템에 많은 부담을주지 않습니다. 그런 다음 네트워크를 통해 데이터를 전송할 필요가없는 효율성으로 인해 증가 된 부담을 보완 할 수 있습니다.


큰 요소는 성능이라고 생각합니다. 웹 서버 / 앱 코드와 SQL Server는 일반적으로 요청 된 데이터를 메모리에 캐시하므로 동일한 메모리 공간에서 캐시 성능을 실행하여 캐시 성능을 저하시킵니다.


Tom이 이것에 맞습니다. 다른 이유는 비용 효율적이지 않으며 추가적인 보안 위험이 있기 때문입니다.

웹 서버는 데이터베이스 서버와 다른 하드웨어 요구 사항이 있습니다. 데이터베이스 서버는 많은 메모리와 매우 빠른 디스크 어레이로 더 나은 성능을 제공하는 반면 웹 서버는 파일 및 빈번한 DB 요청을 캐시하기에 충분한 메모리 만 필요합니다 (설정에 따라 다름). 비용 효율성과 관련하여 두 서버가 반드시 저렴할 필요는 없지만 리소스와 경쟁하는 다른 응용 프로그램이 필요하지 않기 때문에 성능 / 비용 비율이 높아야합니다. 이러한 이유로 두 서버를 모두 수용하고 2 개의 특수 서버에 동등한 성능을 제공하는 하나의 서버에 더 많은 비용을 지출해야 할 것입니다.

보안 문제는 단일 시스템이 손상되면 웹 서버와 데이터베이스가 모두 취약하다는 것입니다. 두 대의 서버를 사용하면 두 번째 서버는 여전히 안전 할 것입니다 (적어도 잠시 동안).

또한 다양한 웹 응용 프로그램에서 사용하는 데이터베이스 서버를 몇 개만 유지하면되므로 확장 성 이점이 있습니다. 이렇게하면 업그레이드 또는 패치 적용 및 성능 조정 작업이 줄어 듭니다. 이러한 작업을보다 쉽게 ​​수행 할 수있는 서버 관리 도구가 있다고 생각합니다 (단일 시스템의 경우).


보안은 주요 관심사입니다. 데이터베이스 서버는 데이터 액세스를 수행하는 데 필요한 포트만있는 방화벽 뒤에 있어야합니다. 웹 응용 프로그램은 응용 프로그램이 작동하기에 충분한 권한을 가진 SQL 계정으로 데이터베이스 서버에 연결해야합니다. 예를 들어 개체를 삭제할 수있는 권한을 제거해야하며 'sa'와 같은 계정을 사용하여 연결해서는 안됩니다.

웹 서버를 가로 채서 (즉, 관리자 권한으로 전체 권한 상승) 웹 서버를 잃어버린 경우 최악의 시나리오는 응용 프로그램의 데이터베이스가 손상 될 수 있지만 전체 데이터베이스 서버는 손상되지 않는 것입니다 ( 데이터베이스 서버와 웹 서버는 동일한 시스템이었습니다). 데이터베이스 연결 문자열을 암호화하고 해커가 해독하기에 정통하지 않은 경우 웹 서버 만 있으면됩니다.


아직 언급되지 않은 한 가지 요소는로드 밸런싱입니다. 웹 서버와 데이터베이스를 별도의 시스템으로 생각하기 시작하면 네트워크 왕복 횟수를 줄이면서 필요에 따라 두 번째 웹 서버 또는 두 번째 데이터베이스 엔진을 추가하는 것이 더 쉬워집니다.


웹 서버와 데이터베이스를 다른 컴퓨터에 배치하는 것이 좋은 생각 인 경우가 많습니다. 리소스를 많이 사용하는 응용 프로그램이있는 경우 시스템의 CPU주기가 쉽게 최대치가되어 시스템이 정지 될 수 있습니다. 그러나 응용 프로그램에서 데이터베이스 사용이 제한적인 경우 서버를 공유하는 것은 별 문제가되지 않습니다.


실제로 5k 달러로 SQL 서버를 구입하면 웹 응용 프로그램보다 더 많이 사용할 수 있습니다. Express를 사용하는 경우 신경 쓰지 않아도됩니다. SQL 서버는 20 ~ 30 개의 응용 프로그램에 대해 데이터베이스를 실행하므로 웹 서버에 배치하는 것이 현명하지 않습니다.

둘째, 서버의 대상에 따라 다릅니다. 나는 금융 회사와 정부를 위해 일합니다. 따라서 우리는 sprocs 만 사용하고 웹 서버에서 SQL로 포트를 제한하는 엉덩이 접근 방식에 미친 고통을 사용합니다. 따라서 웹 앱이 해킹되면 해커가 할 수있는 유일한 일은 웹 서버의 사용자 계정이 DB의 sproc 만 보거나 호출하기 위해 잠겨 있기 때문에 sprocs를 호출하는 것입니다. 이제 해커는 DB에 들어가는 방법을 알아 내야합니다. 웹 서버에 있으면 쉽게 얻을 수 있습니다.


Daniel Earwicker에 동의합니다. 보안 질문에는 거의 결함이 있습니다.

웹 서버를 사용하여 단일 상자를 설정하고 해당 웹 서버의 데이터베이스 만있는 경우 해당 웹 서버가 손상되면 웹 서버와 해당 특정 응용 프로그램의 데이터베이스 만 손실됩니다.

이것은 2 서버 설정에서 웹 서버를 잃어버린 경우와 정확히 동일합니다. 웹 서버와 해당 특정 응용 프로그램의 데이터베이스 만 손실됩니다.

첫 번째 시나리오에서는 다른 모든 응용 프로그램 (있는 경우)과 관련된 다른 모든 데이터베이스 서버도 영향을받지 않기 때문에 2- 서버 설정이있는 '나머지 DB 서버의 무결성이 유지됩니다'라는 주장은 관련이 없습니다. -다른 곳에서 호스팅되는 것.

마찬가지로 Kev가 제기 한 질문에 대해 'DB 서버에있는 다른 모든 데이터베이스는 어떻습니까? 잃어버린 것은 하나의 데이터베이스뿐입니다. '

  • 한 서버에서 응용 프로그램 및 데이터베이스를 호스팅하는 경우 해당 응용 프로그램과 관련된 데이터베이스 만 해당 서버에서 호스팅합니다. 따라서 다중 서버 설정과 비교할 때 단일 서버 설정에서 추가 데이터베이스가 손실되지 않습니다.

이와 반대로 공격자가 웹 서버에 액세스 할 수있는 2 서버 설정과 프록시를 통해 데이터베이스 서버에 대한 제한된 권한 (가장 좋은 시나리오)은 다른 모든 응용 프로그램의 데이터베이스를 가지고 다닐 수 있습니다. 메모리를 많이 사용하는 느리게 쿼리하거나 데이터베이스 서버에서 사용 가능한 저장 공간을 최대화하십시오. 가상화와 마찬가지로 응용 프로그램을 자체 관심사로 분리함으로써 보안 목적을 위해 긍정적 인 방식으로 응용 프로그램을 분리 할 수도 있습니다.


응용 프로그램과 목적에 따라 다릅니다. 고가용 성과 성능이 중요하지 않은 경우 DB와 웹 서버를 분리하지 않는 것이 나쁘지 않습니다. 특히 성능 향상을 고려할 때-응용 프로그램에서 많은 양의 데이터베이스 쿼리를 수행하는 경우 동일한 시스템에 모두 유지하여 응답 시간을 낮게 유지하면 상당한 양의 네트워크로드를 제거 할 수 있습니다.


나는 두 기계가 일반적으로 다른 방식으로 최적화되어야하기 때문에 그것이라고 생각합니다. 그 외에는 공개 시스템이 아닌 경우 동일한 시스템에서 서버 데이터베이스를 사용하여 모든 응용 프로그램을 실행하지만 문제는 없습니다.

I can't imagine that too many people care about one machine being compromised over both since the web application will usually have nearly unrestricted access to at the very least the data if not the schema inside the database.

Interested in what others might say.


I listened to that podcast, and it was amusing, but the security argument made no sense to me. If you've compromised server A, and that server can access data on server B, then you instantly have access to the data on server B.


Database licences are not cheep and are often charged per CPU, therefore by separating out your web-servers you can reduce the cost of your database licences.

E.g if you have 1 server doing both web and database that contains 8 CPUs you will have to pay for an 8 cpu licence. However if you have two servers each with 4 CPUs and runs the database on one server you will only have to pay for a 4 cpu licences


An additional concern is that databases like to take up all the available memory and hold it in reserve for when it wants to use it. You can force it to limit the memory but this can considerably slow data access.


Arguing that there is a real performance gain to be had by running a database server on a web server is a flawed argument.

Since Database servers take query strings and return result sets, the data actually flowing from data server to web server is relatively small, but the horsepower required to process the query and generate the result set is relatively large. Optimizing performance around the data transfer time therefore is optimizing around the wrong thing.

Regarding security, there are advantages to having the data server on a different box than the web server. Having such a setup is not the be all and end all of security, but it is a step in the right direction.

Regarding scalability, it is easy and relatively cheap to add web servers and put them into cluster to handle increased traffic. It is not so easy and cheap to add data servers and cluster them. Also, web servers and data servers have different hardware needs, so multiple boxes help out with scalability.

If you are starting small and have only one box, then a good way would go would be to use virtual machines. Running the web server and data server in different VMs on one host gives you all the gains of separate boxes at the cost of one large box price.


Operating system is another consideration. While your database may require larger memory spaces and therefore UNIX, your web server - or more specifically your app server since you mention only two tiers - may be a .Net-based, and therefore require Windows.


Ok! Here is the thing, it is more Secure to have your DB Server installed on another Machine and your Application on the Web Server. You then connect your application to the DB with a Web Link. Thanks it.

참고URL : https://stackoverflow.com/questions/659970/why-is-it-not-advisable-to-have-the-database-and-web-server-on-the-same-machine

반응형