특정 데이터베이스 개체 또는 레코드에 대한 권한에 대한 사용자 액세스 확인

StackOverflow https://stackoverflow.com/questions/254610

문제

사용자가 웹 응용 프로그램에서 로그인하고 문서에 액세스하는 상황에 대해 개발자와 친근한 토론을하고 있습니다. 사용자가 볼 수 있도록 문서를로드 할 때 QueryString을 통해 전달 될 수있는 userID와 DocumentID가 있습니다.

사용자가 쿼리 스트링에서 DocumentID를 수정하지 못하도록하려면 문서를로드하는 저장된 프로 시저가 userID를 매개 변수로 사용하여 문서에 대한 권한을 검증 할 것을 제안합니다.

내 개발자 친구는 페이지의 이전 문서에 대한 액세스 권한을 결정하기위한 별도의 절차를 실행하고 문서가 표시 될 때 문서를 가져 오는 절차를 실행한다고 제안합니다.

우리는 뭔가를 놓치고 있습니까? 가장 효율적이고 안전한 것은 무엇입니까? DocID를 사용하여 userID를 하나의 절차로 전달하여 권한을 확인하고 문서를 가져 오는 것이 더 효율적인 솔루션이라고 생각했습니다.

도움이 되었습니까?

해결책

성능 관점에서 엄격하게, userID를 하나의 저장된 절차로 전달하는 것이 가장 좋습니다. 데이터베이스 서버로의 왕복이 하나만 있습니다. 또한 다른 사람들이 지적했듯이, 다른 페이지 나 응용 프로그램 에서이 문서를 검색 할 경우, 동일한 저장된 절차를 사용하는 경우 보안을 우회하지 않아도됩니다.

그러나 전용 보안 검증 저장 절차가 의미가있는 시나리오가 있습니다. 문서 외에 보호하려는 다른 리소스가 있고 Verfication Code가 사소하지 않은 경우 데이터베이스의 모든 저장된 절차에서 Verefication 코드를 복제하지 않을 수 있습니다. 이 경우 보안 인프라를 데이터 액세스 계층으로 옮기고 데이터 액세스 계층이 요청 된 리소스를 검색하기 전에 액세스 권한을 호출하도록하는 것이 합리적 일 수 있습니다. 이 경로를 사용하는 경우 개발자에게 의존하여 자원을 요청하기 전에 항상 승인 DB 전화를 해야하는 것을 기억해야합니다.

다른 팁

문서를로드하는 저장된 프로 시저가 userID를 매개 변수로 취하여 문서에 대한 권한을 검증 할 것을 제안합니다.

나는 이것이 갈 길이라고 생각합니다. 다른 이유가 더 안전하지 않은 경우. 이 Proc를 재사용 한 다음 액세스를 확인하는 것을 잊어 버린 경우 큰 구멍을 뚫었습니다. 이런 식으로 접근 할 수 없다면 문서에 갈 수 없다는 점에서 명백하고 구운 것입니다.

userID는 세션 변수 여야합니다. 오른쪽. QueryString에 DocumentID를 전달하십시오. 예.

문서가 데이터베이스에 저장되어 있다고 가정하면 권한에 대한 테이블이 있습니다. 문서를 호출 할 때이 테이블과 조인합니다. 결과를 얻지 못하면 문서를 얻지 못합니다. 모든 것을 잘 색인하면 빠르게됩니다.

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