2009-12-14 3 views
2

을 관리해야합니까? 내 논리를 구현하는 저장 프로 시저를 사용하는 응용 프로그램을 만들고 있습니다. 난 내 데이터베이스가이 목적을 위해 내가 FailPasswordAttemptCount 다음 몇 가지 값으로 변경되면 내 데이터 유효성 검사 논리 같은 것을 구현하기위한 트리거를 작성해야합니다, 유효하지 않은 항목을 포함하지 원하는 독일인의이 시나리오에서 어떻게 작동해야합니까? 내가 방아쇠를 남겨주거나 사용자에게 남겨서

지금 내가 알아야 할 것입니다 이에 따라 해당 열에서 IsLocked를 변경하거나 트리거를 통해 관리해야합니다.

예를 들어

if FailPassowrdAttemptCount > 3 
    IsCaptchaActivated=True 
if FailPasswordAttemptCount>6 
    IsLocked=true 

이제 DBA는 다음이 내 프런트 엔드에 대한 잘못된 항목을 만들 것입니다 true로 IsCaptchaActivated를 변경하지 않고 4 FailPasswordAttemptCount의 값을 변경합니다. 그래서 내가 트리거를 통해 그것을 관리해야합니까, 아니면 dba를 통해 올바른 입력을해야합니까?

이 입력 항목은 프론트 엔드를 통해 가능하지 않지만 데이터베이스에 액세스 할 수있는 권한이있는 사용자 인 경우 데이터베이스를 통해 직접 변경됩니다. 이것을 사용자에게 맡기거나 트리거를 관리해야합니다. 모든 상황에서 데이터베이스가 일관되게 유지되도록하고 싶습니다.

답변

2

내가 만들 것 다음

  • 원하는 코드를 삽입 저장 프로 시저를 응용 프로그램이 테이블
  • 와 상호 작용하는 유일한 방법을 만들어 저장 프로 시저
  • 에 데이터 유효성 검사 논리를 넣어 저장 프로 시저에 저장합니다.

트리거 기반 프로그래밍 패러다임은 응용 프로그램의 비즈니스 논리 복잡성이 증가함에 따라 코드 작성 및 관리가 너무 어려워집니다.

그러나 이처럼 간단한 논리 만 사용할 것이라면 응용 프로그램이 데이터베이스와 상호 작용하는 방식을 최소한으로 변경해야하므로 트리거에 넣어도됩니다.

+0

Thx하지만 제안 사항은 조금 혼란 스럽습니다. 내 애플리케이션에서 불법적 인 데이터 입력을 입력하지 않습니다. 이 시나리오는 실수로 테이블에 실수로 일부 변경 작업을 직접 수행하는 것을 고려하고 있습니다. –

+1

테이블에 대한 DML 권한을 취소하고 저장 프로 시저에 부여합니다. 이렇게하면 저장 프로 시저에 코딩되지 않은 것을 수행 할 수 없습니다. 참조 : http://www.sommarskog.se/grantperm.html – Quassnoi

2

나는 이런 식으로 트리거를 사용하지 않을 것입니다. 트리거는 애매 모호하며 개발자를 위해 디버그하기가 어려울 수 있습니다. 테이블 및 저장 프로 시저를 사용하여 문제를 처리하십시오. 대안이없는 경우 트리거를 사용하십시오.

0

이 상황에서는 설명하는 상황에서만 트리거를 사용하지 않을 것입니다. dba가 앱의 보안과 밀접하게 연관된 분야에서 데이터를 수동으로 변경하는 이유는 무엇입니까?

0

응용 프로그램 논리에서이를 구현합니다. 로그인 sproc을 호출 할 때 성공했는지 여부와 실패한 비밀번호 시도 횟수 및 보안 문자가 필요한지 여부를 모두 반환 할 수 있습니다. DBA가 3에서 4로 변경했는지 여부와 관계없이 코드에 4가 표시되고 유효성 검사 결과가 무시되며 사용자에게 보안 문자가 표시됩니다. DBA가 직접 코드를 수정하는 것에 대해 걱정이된다면 APP_NAME() 함수/변수를 검사하여 어떤 프로그램이 데이터를 수정하려고하는지 확인할 수도 있습니다. 아주 조심해야 할 것이지만 DBA는 필드를 직접 수정합니다.

+0

제안 사항입니다. 로그인 관련 모듈을 완벽하게 안전하고 유익하게 만들기 위해 모든 최악의 시나리오를 시도합니다. 나는 또한 sproc을 사용하여 응용 프로그램 논리를 통해 sproc을 통해 이러한 모든 데이터를 관리하고 있습니다. 하지만 실수로 누군가 테이블을 직접 변경하면 –

1

둘 다의 조합을 사용합니다. 가능한 한 데이터를 제한하려고 노력할 것입니다. 아무도 잘못된 항목을 삽입 할 수 없도록 방아쇠를 발사합니다.

+0

멋진 답변이지만, 이러한 상황을 관리하는 것은 복잡한 작업으로 보입니다. Quassnoi의 코멘트가 좋은 대답 인 것 같네요. –

관련 문제