2009-07-13 2 views
2

현재 다음에 다중 사용자 액세스를 목표로하는 중소 기업 데이터베이스 응용 프로그램을 개발 중입니다.행 단위로 데이터베이스 액세스 제어를 구현하는 방법

데이터베이스에는 주로 추가 정보가 들어있는 몇 개의 조인 된 테이블이있는 프로젝트 (프로젝트 테이블에서)가 포함됩니다.

다중 사용자 작업과 관련된 고객의 요구 사항은 주로 프로젝트 수준 (즉, 사용자는 일부 프로젝트에만 액세스 할 수 있음)을 기반으로하는 세분화 된 액세스 제어입니다. 나는 이것을 구현하는 방법을 궁금해.

상황을 좀 더 어렵게 만드는 이유는 데이터베이스 액세스가 필요한 SQL 쿼리 (nhibernate와 유사)를 구성하는 자체 개발 된 지속성 계층에서 주로 발생하기 때문입니다.

유일한 해결책은 액세스 확인을 구현하는 데이터베이스 내에 저장 프로 시저 (또는 읽기 액세스 용보기)를 구현하는 것입니다. 우리의 영속 계층은 현재 테이블에 대한 완전한 액세스에 의존하기 때문에 각 테이블에 대해 읽기 뷰, 삽입 및 삭제 명령을 구현하고 INSERT/DELETE 쿼리를 생성하는 대신 이러한 명령을 사용하기 위해 지속성 계층을 변경해야합니다. .

우리의 코드를 변경할 필요가없는 다른 해결책이 있는지 궁금 해요 ...

답변

1

것은 이런 종류의 바로 얻을 어려울 수 있습니다. 다른 것들 중에서도 이와 같은 요구 사항은 패키지 시스템 위에 구축해야하는 이유입니다. 아직 작성하지 않은 버그가 이미 수정되었을 것입니다.

독자적으로해야하는 경우 보안 측면을 올바르게 설정하는 데 집중하고 나중에 코드를 변경하는 것에 대해 걱정하지 않는 것이 좋습니다. 코드를 변경하지 않으려 고하므로 보안을 침해하기를 원하지 않을 것입니다.

추가 정보 한 개를 저장 프로 시저로 전달할 수 있습니다. SQL Server 버전에 따라 XML 조각 또는 테이블 반환 매개 변수 일 수 있습니다. 사용자가 가져야하는 액세스를 결정하는 데 필요한 모든 정보가 포함됩니다. 어쩌면 사용자 ID 일 수도 있지만 누가 알겠습니까?

이 정보를 사용하여 액세스를 기반으로 반환 된 행 집합을 필터링하는보기 및/또는 테이블 반환 함수를 만들고 싶습니다.

1

단순한 (그러나 일반적인) 방법 중 하나는 WITH CHECK OPTION을 사용하여 각 사용자 그룹에 대해 VIEW을 만드는 것입니다. INSERT, UPDATEDELETE 조작에 대해 더 복잡한 논리를 허용하려면 VIEWINSTEAD OF 트리거가 필요합니다.

관련 문제