문제

우리는 프로세스에서의 설정하는 새로운 방법으로 사업을 하는 우리의 새로운 내부 앱입니다.우리의 현재 디자인을 지시는 모든 보안 논리에 의해 처리되어야 하는 우리의 데이터베이스 및 모든 정보(그리고 내 말은 모든)가 나타나고서를 통해 데이터베이스를 저장합니다.

이 이론은 데이터 액세스 층 요청에서 정보를 저장 프로시저를 통과 인증 데이터베이스에 있습니다.데이터베이스를 결정한 사용자의 역할이/권고할지 여부를 결정하는 작업을 수행(수 있는지 데이터를 검색하거나 업데이트).

이미 적은 데이터베이스 트랜잭션이 있습니다.중 하나를 호출하여 데이터베이스입니다.보안 경우에 우리의 데이터 액세스를 레이어,이 필요로 1 데이터베이스화하는 결정하는 경우에는 사용자가 적절한 권한,그리고 그 다음 1 시 별도의 데이터베이스화하는 작업을 수행합니다.

내가 찾는 SQL Management studio 에 완전히 부족으로 IDE 입니다.나의 주요 관심사입니다 우리는 끝을 유지할 필요한 양의 비즈니스에서 논리는 우리의 저장 프로시저를위한 몇 가지 아주는 최소한의 성능을 향상시킬 수 있습니다.

지금,우리가 사용하는 LINQ 에 대한 우리의 ORM.그것은 보인다,가볍고 빠르지만 최고의 모든,정말 쉽게 빠르게 개발합니다.

은 유지보수 비용을 가치가 있는 성능을 얻?우리가 속여 스스로 생각하고 있는 것입니다 심지어는 눈에 띄는 성능을 얻?나 우리는 그냥 만드는 악몽에 대한 자신?

우리의 환경:

  • 내부,non-미션 핵심적인 업무용 애플리케이션
  • C#/ASP.NET3.5
  • Windows2003
  • MS SQL Server2005
  • 35 중간 크기의 웹 앱은 약 500 명의 사용자
도움이 되었습니까?

해결책

하지 않는.우리는 최근에 매우 나쁘 경험을 때"데이터베이스 전문가"를 이동하기로 결정하는 다른 회사입니다.정비의 모든 논리 절차에서는 다운!!

예,당신은 몇 가지 성능 개선,하지만 그 가치가 없습니다.사실,성능이 좋지 않더라도 큰 관심 내용.더 많은 돈을 투자에서 좋은 서버에 있습니다.그것은 돈을 지불합니다.

다른 팁

불행하게도 없습니다"하나의 진정한 대답".선택해야 합니다 여러 요인에 따라 달라집,다음과 같:

  • 의 친숙한 팀은 주어진 솔루션(ie 는 경우에는 그들의 대부분은 편안한 SQL 작성,할 수 있는 데이터베이스에서,그러나는 경우에는 그들의 대부분은 더 편안 C#,그것이 있어야에서 코드)
  • "정치적 권력"을 각 당사국은
  • etc.

이 없는 결정적인 장점은 어떤 방향으로(당신이 말했듯이 성능 향상을 최소화),한 가지를 염두에 두 드라(반복하지 않는 자신)원리:지를 구현하는 기능이 두 번에서(코드 및에서 DB),기 때문에 그들이 동기화됩니다.하나를 선택하는 솔루션입니다.

당신은 그것을 할 수 있었지만 엄청난 고통에 대한 개발 및 유지 관리합니다.에서 가져 가는 사람은 프로젝트에서는 거의 모든 사업 논리는 코드에서 저장되는 절차가 있습니다.

보안을 위해,ASP.NET 는 사용자 역할을 관리 구운로 그것을 수도 있습니다 그래서 절약할 수정하는 데이터베이스 그러나 그래서 무엇인가?에서 교환 그것은 훨씬 더 성가를 처리하고 디버깅 시스템과 유효성 검사 오류가 있기 때문에 그들은 거품에서 데이터베이스입니다.

단위 테스트는 것은 훨씬 더 어렵기 때문에 프레임워크를 사용할 수 있에 대한 단위 테스트 sprocs 훨씬 덜 개발되었습니다.

적절한 oop 및 도메인 중심의 디자인은 모든지만 창문 밖.

그리고 성능 이점이 될 것이 작은 경우.우리는 이야기에 대해 이 .

나는 것이 좋습니다 당신이 저장하려는 귀하의 정신으로 개발자가 당신이 싸움을 유지하는 데이터베이스로 지속성 층만

이럴:

응용 프로그램 서비스를 계층->응용 프로그램 논리 및 검사
응용 프로그램 데이터 tier->데이터를 논리 및 보안
데이터베이->데이터를 일관성

당신이 될 것입니다에 물린 sproc 접근 방식을 조만간,나는 배운 것이 어려운 방법입니다.
발동에 대한 좋은 하나 촬영하는 작업이 많이 필요하의 성능,하지만 지난 부분은 데이터 계층 작업

저장 프로시저는 일반적으로 승리를 위한 보안이다.단순화 간의 관계는 응용 프로그램 및 데이터베이스의 수를 줄 수 있는 곳이 있는 오류오류 코드에서는 비즈니스 로직 인터페이스 데이터베이스에 경향이있는 보안 문제입니다.그래서,당신의 DBA 잘못되지 않았는지에 대해 잠금 것들을 저장합니다.

또 다른 혜택을 잠그는 응용 프로그램을 저장 프로시저는 스택의 데이터베이스에 연결할 수 있는 권한이 잠겨 있는 특정한 저장 프로시저를 통화 및 다른 아무것도 있습니다.

데 혜택 DBA 에 참여 보안에 대한 논리를 응용 프로그램은 다른 응용 프로그램의 기능과 역할을 분할할 수 있는 데이터베이스에서 아래로망,그래서 그는 경우에도 dynamic SQL 및 일반적인 선택의 문에 필요한 손해에서 SQL 취약점을 제한할 수 있습니다.

플립 사이드의 것은 물론,손실 유연합니다.ORM 은 분명히 가을 빠르게 개발하는 것보다 일정한 협상으로 DBA 는 이상 저장 프로시저를 매개 변수입니다.고의 압력으로,그 절차를 저장 성장,그것은 더 많은 가능성이 그 절차에 자신이 리조트 dynamic SQL 에서는 것만으로 취약한 응용 프로그램으로 구성된 SQL 를 공격합니다.

가 행복 여기에 중간,당신은 그것을 찾아보십시오.일했 프로젝트에서는 최근에 저장된 에서 아주 끔찍한 SQL injection 문제 때문에 DBA 가 조심스럽게 구성되어 데이터베이스 연결,그리고 저장 프로시저를 위한"최소한의 권한"그래야,어떤 하나의 데이터베이스는 사용자가에만 액세스하는 무엇이 그들이 필요한 알고 있습니다.

분명히 당신이 쓰 SQL 코드 앱에서 논리,당신이 있는지 확인 하십시오를 사용하여 지속적으로 매개 변수가 있는 준비 계산서,당신은 살균 입력,즉 당신이 늘 다국어 입력(는 많은,많은 방법을 말하는 단 하나 이상 인용 HTTP),그리고 당신의 염두 어떻게 데이터베이스가 동작할 때 입력은 너무 큰에 대한 열의 폭을.

그리는 모든 경우 그것은 아마도 이동하지 않는 것이 좋 SP 로 모든 것을 할 수 DDD 방법(들에게는 도메인 모델에 코드를 사용하는).

그러나,데이터베이스를 보유하고 있는 경우에는 사용되지 않는 응용 프로그램에 의해 하지만 많은에 의해 다음을 고려한 웹 서비스를 사용하고 있습니다.어떤 방법으로,데이터베이스에 액세스할 수 있는 유일한을 통해 한 층을 적용하는 비즈니스 규칙 다른 당신은 끝날 것으로"더러는"데이터 및 살균 데이터 후 훨씬 더 큰 고통을 쓰는 것 보다 몇 가지 사업을 규정합니다.좋은 데이터베이스는 체크인 제약 조건 및 인덱스트,그래서 그것이 어떤 규칙 비즈니스지 여부를 당신이 그것을 좋아하지 않습니다.

고 있는 경우를 다루는 수백만과 수십억의 기록을 당신이 행복할 것이 좋은 DB-는 사람 문제를 해결합니다.

내 의견은 응용 프로그램 자체가 처리해야 합 인증 및 허.데이터베이스에 대한 측면 당신은 단지 처리하는 데이터를 암호화로 필요합니다.

내가 내장되어 있는 저장 프로시저 기반의 응용 프로그램이다.귀하의 경우에 있는 아마을 유지하는 방법은 인증서의 데이터베이스층과 당신의 비즈니스 논리에 있습니다.보기를 사용하여 데이터를 제한하는(당신이 볼 행할 권한이 있습니다).이러한 뷰에서 사용할 수 있습 LINQ 과 같이 쉽게 테이블이 있습니다.당신이 설정한 업데이트와 함께 발생을 저장합니다.

이 linq,비즈니스 로직 C#,그리고 일반 인증에서 레이어는 데이터베이스 컨트롤에 액세스하는 데이터입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top