2011-02-04 3 views
1

내 수석 디자인 프로젝트에서 나는 많은 하위 도구로 iGoogle 유형 응용 프로그램을 만들고 있습니다. 응용 프로그램은 많은 양의 AJAX를 사용합니다. 이 때문에 일부 정보는 클라이언트에 전송 될 때 페이지에 저장되므로 추가/삭제 등의 작업을 수행 할 때 도구에 업데이트 할 수 있습니다.SQL 서버 업데이트/삽입/삭제 가입 질문

내 질문은 보안과 관련하여 발생합니다. 데이터가 클라이언트 측에서 변조되어 사용자가 잠재적으로 다른 사용자 데이터에 영향을 미치지 않도록 할 수는 없습니다.

내가하고 싶은 것은 사용자가 자신의 데이터 만 변경하고 있는지 확인하기 위해 삽입/업데이트/삭제 문을 만들 때 userid를 확인하는 것입니다.

이것은 사용자 테이블의 사용자 ID를 외래 키로 사용하는 첫 번째 테이블에는 문제가되지 않습니다. 그러나 나는 거기에서 분기하는 수많은 다른 테이블을 가지고있다.

두 개의 별도 명령문/쿼리를 수행하지 않고도 할 수있는 방법이 있습니까? 내가 선택 조인을 할 수있는 그런 레코드가 존재하는지 확인한 다음 업데이트/삽입/삭제를 수행하십시오. 한 가지 진술로 할 수 있습니까?

SQL Server에서 하위 쿼리를 살펴보기 시작했습니다. 서브 쿼리를 사용하여이 작업을 수행 할 수 있습니까?

만약 이것이 바보 같은 질문이라면, 내 무지를 변명하십시오. 아직도 배우기. 감사.

+0

그럼 내가 가짜 사용자 ID를 악의적 인 데이터와 함께 제출하는 것을 어떻게 막을 수 있습니까? –

+0

귀하의 질문은 SQL Server에서 데이터를 보호하는 방법에 관한 것이지만 디자인 아키텍처가 중요한 부분입니다. 예, 저장 프로 시저를 사용해야하며, 예, 조인 또는 하위 쿼리를 사용하여 실행 사용자가 특정 데이터를 조작 할 수 있는지 여부를 결정할 수 있습니다. 그러나 이러한 규칙/제약 조건은 "또한"UI에 적용되어야합니다. 사용자로서 UI에서 이러한 모든 작업을 수정 한 다음 변경 내용을 커밋하려고 시도한다고 상상해보십시오. 그런 다음 백엔드 (즉, SQL Server)에서 사용자가 수정하려고 시도한 내용을 수정할 수 없다고 말하면 앱이 소리를 지릅니다. 사용자로서 방금 시간을 낭비했습니다. – bitxwise

답변

0

하나의 SQL 문을 사용할 수 있습니다. 저장 프로 시저에 사용자 ID를 전달하십시오.

예, 아마도 insert 문에서 하위 쿼리를 사용하게 될 것입니다. 테이블 구조의 예제를 제공하면 좀 더 구체적인 답을 줄 수 있습니다.

보안 측면 (나는 당신의 질문의 일부가 아닙니다)에 관해서는 어떻게 클라이언트와 서버간에 사용자 ID를 전달하고 있습니까?

+0

이것은 데이터베이스 스키마의 이전 버전이지만, 충분 : https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bwy4qFl6LwWXNGQxODg4MGYtYzlmZS00MTZlLWIzNjctNGIxNjRiZWZmNzJj&hl=en – user603682

+0

는 사용자 ID에 관해서는, 나는 Membership.GetUser를 (사용되었다 User.Identity.Name) .ProviderUserKey.ToString(); userside를 얻기 위해 serverside. – user603682

+0

보기 오류로 인해 문서를 검색 할 수 없습니다. 질문에 이미지를 첨부하거나 단순히 두 개의 테이블 스키마를 제공 할 수 있습니다. 사용자 테이블과 업데이트하려는 다른 테이블. –

0

이 무엇입니까?

Select Table1.userId 
From Table1 
JOIN Table2 on Table1.usedId = table2.userId 
where table1.userId = @userId 

쿼리가 null을 반환하면 일치하는 레코드가 table2에 있습니다.

+0

SELECT table.UserId에 "table"이란 무엇입니까? 그리고 이것은 단지 참여하고 있습니다. 또한 "쿼리에서 null을 반환하면 일치하는 레코드가 table2에 있습니다"라고 말합니다. "일치하는 레코드가 없습니다"라는 뜻입니까? 그럼에도 불구하고 질문은 테이블에서 레코드를 업데이트/삽입/삭제하는 것이지 조인을 수행하는 방법이 아닙니다. –

+0

코드를 수정하겠습니다. 나는 'Select Table1UserId'가 아니라 'Select'table.UserId '코드를 편집 할 것입니다. 아마도 OP가 업데이트를하기 전에 table2에 일치하는 userId가 있는지 확인하려고했습니다. – Ali