2012-02-02 1 views
0

인터넷에 SQL 서버를 여는 개념이 마음에 들지 않습니다. 방화벽을 잠글 수 있더라도. 그러나 나는 항상 데이터베이스와 직접 작업 해왔다. 지금 SQL Server 데이터베이스 1 개, ASP.NET/C#의 웹 응용 프로그램 및 Delphi XE2의 몇 가지 Windows 응용 프로그램을 포함하는 시스템을 구축하고 있습니다. 그러나 처음부터 데이터베이스 주위에 일종의 '필터'를 넣어서 열 필요가 없습니다.델파이와 C# 모두를위한 SQL Server 레이어

나는 이것에 대해 많은 것들을 알고 있지만 그들에 대해 아무것도 알지 못하거나 내 시나리오를 위해 무엇을 얻을지 모릅니다. SQL Server에 기본으로 유지하고 싶습니다. 다른 유형의 데이터베이스 엔진을 사용할 계획은 없습니다.

필터와 같은 표준 SQL 연결 이외의 방법으로 클라이언트에서 서버로 연결해야합니다. 자체 암호화 패킷을 생성하고 데이터를 자체 방식으로 전송합니다. 델파이와 C# 모두를위한 래퍼 클래스를 갖게 될 것이고, 거의 동일하게 될 것이며, 데이터를 DLL로 스트리밍하여 DB와 상호 작용할 수있게 될 것입니다.

지금은 이것에 대해 갈 수있는 세 가지 방법이 ...있다

  • 전체 SQL 서버 래퍼, 가장 가능성이없는 소스 코드, 심지어 내가 데리러 싶지 않아 (그 자신의 언어가있을 수 있습니다 다른 데이터베이스 언어), 내 프로젝트와는 별도로 자체 시스템으로 독립적으로 사용할 수 있습니다.
  • 델파이 (XE2)에서 오픈 소스 래퍼, 그렇지 않으면 C#, 내 시스템 전용 프로토콜, 전적으로 프로젝트 전용, DLL의 최종 형식으로 웹 사이트 (예 : C#에서) 및 응용 프로그램 (Delphi에서).
  • 웹 서비스 - 그러나 나는 단지 1 개의 호스팅 사이트를 가지고 있습니다 (1 사이트 지불, 2 사이트는 2 배가됩니다). 추가 웹 서비스 또는 Windows 서비스를 호스팅 할 수 없습니다. 그것은 웹 사이트와 통합되어야합니다. 그렇지 않으면, 나는 이것을 위해 웹 서비스를했을 것이다.

나는 두 번째 옵션을 선호하고 첫 번째 옵션에 가깝게 가고 싶지 않으며 세 번째 옵션을 전혀 수행 할 수 없습니다.

그럼 데이터베이스 레이어에 적합한 라이브러리는 무엇입니까? 그리고 이미 델파이 XE2에 일부가 설치되어있을 수 있습니까? 아마 암호화 된 XML 패킷을 생각하고 있나?

예를 들어 'Customers'에 대한 표가 있다고 가정 해 보겠습니다. 내 웹 사이트와 응용 프로그램에서 나는 결코 select * from Customers과 같은 SQL 스크립트가 없거나 일반적으로 SQL 스크립트가 없어야합니다. 대신 데이터베이스 주위에 래퍼가 있습니다. 그래서 DBGetCustomers(Conditions: TGetCustomersConditions): TDBCustomers;과 같은 함수를 호출 할 수 있습니다. 여기서 TGetCustomersConditions은 쿼리를 필터링하는 몇 가지 방법이고, TDBCustomers은 쿼리의 결과를 나타냅니다.

DBAddCustomer(Item: TCustomerToAdd): TInsertSuccess;이있을 수도 있습니다. 여기에서 TCustomerToAdd은 삽입 할 내용을 나타내고 TInsertSuccess은 영향을받는 오류 메시지 또는 영향을받는 행을 나타냅니다. 나는 그것이 작동하도록 의도하지 않는다. 정확히과 같지만, 일반적으로 모든 래퍼의 개념을 설명하기 위해서이다. 응용 프로그램이 서버에 요청을 보내면 SQL 쿼리로 아무 것도 변환하지 않은 것입니다. 요청이 서버 (데이터베이스에 연결할 수 있음)에 도착할 때까지 서버는 SQL 쿼리에 대한 모든 것을 디코딩합니다.

+0

내가이 질문은'유용하지 '방법이 downvoters 알고 싶어요 것 세계의 유일한 사람이 보안을 위해 데이터베이스 주위에 레이어를 배치하려고합니다. –

+0

불행히도 당신은 단지 그것에 익숙해 져야합니다 (+1). 나는 관련된 개념을 결코 이해하지 못했던 사람들로부터 우스운 투표를 몇 번했습니다. 익명 다운 투표를 허용하는 요지는 무엇인지, 그리고 나는 이유가 필수적이어야한다고 생각한다! – Peter

+0

나는 똑같은 주장을했다. 누군가가 downvote를 원한다면 적어도 20 문자를 설명해야한다. –

답변

3

문제점 : 단 하나의 "호스팅 지점"이 있더라도? 웹 서비스는 단지 "사이트"일뿐입니다. 또한 웹 서버는 단일 IP 주소로 여러 사이트를 쉽게 호스팅 할 수 있습니다. 어쨌든, 당신이 찾고있는 것은 다중 계층 디자인의 "응용 프로그램 서버"입니다.

Java는 그 방향으로 많이 투자했지만 MS는 그렇지 않았습니다. Delphi는 너무나도 프레임 워크 인 Datasnap을 가지고 있기 때문에 새로운 "편안한"인터페이스가 C#에서 쉽게 호출 할 수 있는지 여부를 알 수 없지만 보안 결함이있는 것으로 보입니다. 델파이에서 잘 작동한다면 표준 프로토콜을 사용하는 한 WCF를 사용하는 .NET 방식입니다.

RemObjects DataAbstract를 볼 수도 있습니다. 오픈 소스가 아니지만 성숙한 도서관입니다.

+0

+ 1 DataAbstract는 .NET 용 서버 라이브러리와 함께 Open Data Protocol (http://www.odata.org/producers에 따라)을 지원하는 것으로 보입니다. Mono (Linux & OS X) 및 델파이. – mjn

+0

'단 하나의 "호스팅 지점"이 있더라도 문제는 무엇입니까? 웹 서비스는 단지 "사이트"입니다. "- 서버는 제 것이 아니며 하나의 사이트에 비용을 지불하고 있습니다. 다른 사이트 (예 : 웹 서비스)는 이중 호스팅 비용을 지불해야합니다. 차라리 세부 사항에 들어 가지 않을 것입니다. +1 이하. –

+0

다른 사이트의 웹 서비스 * 안에 * 넣을 방법이 없다면? HTTP 요청을 수신/응답하는 작업 만하는 단일 페이지처럼? –

1

이 작업을 수행하는 '전통적인'방법 중 하나는 웹 서비스를 통한 것입니다. (이 기술은 이제 약간의 것으로 간주됩니다).

하나의 단점은 데이터베이스 주위에 던질 수있는 일반적인 래퍼가 아니지만 데이터베이스에 대한 액세스를 특정 저장 프로 시저로 쉽게 제한 할 수 있다는 점입니다. 이는 보안을 최대화하며 외부 응용 프로그램에 대해 제한적으로 권한이 부여 된 액세스를 제공하려는 경우 표준 기술입니다.

+0

+1, 그리고 전에 실제로 이와 같은 웹 서비스를 사용했습니다. 그러나이 특별한 경우에는, 나는 단지 1 개의 호스팅 장소, 1 개의 데이터베이스 및 서버에 대한 매우 제한된 액세스만을 갖는다. 그렇지 않으면 나는 실제로 그것을했을 것입니다. '3 번째'옵션으로 추가 할 것입니다 ... –

+0

+1 웹 서비스가 구식 인 이유는 무엇입니까? SAP 등 [여러 공급 업체] (http://www.odata.org/producers)에서 사용하는 [Open Data Protocol] (http://www.odata.org/)을 확인하십시오. Microsoft, IBM – mjn

+0

"out of fashion"이라고 적혀 있어야합니다 :) –

1

이미 ASP.NET C# 웹 응용 프로그램을 사용하는 경우 웹 사이트에 WCF (Windows Communication Foundation) 기반 웹 서비스를 추가 할 수도 있습니다. 이것은 웹 서비스를 어떻게 든 연결해야하는 외부 응용 프로그램에 데이터베이스 액세스를 제공 할 수 있습니다. 웹 서비스를 www.example.com/services/servicename과 같은 특정 컨텍스트 경로에 매핑하여 일반 웹 사이트 페이지와 서비스에 동일한 HTTP 표준 포트를 사용할 수도 있습니다.

1

Kbmw을 사용하면 ntier db 아키텍처를 만들 수 있습니다. 내가보기 엔 내가 '의심 - 당신이 포함 된 웹 응용 프로그램이 있기 때문에

그러나, 더 나은 옵션은 WCF (이미 제안)