가능한 중복 :
웹 "서버 이하"응용 프로그램 작성
따라서 Stack Exchange 복제본을 구축하고 백엔드 저장소로 CouchDB와 같은 것을 사용하기로 결정했다고 가정 해 봅시다. 내장 인증 및 데이터베이스 레벨 권한 부여를 사용하는 경우 클라이언트 측 Javascript가 공개적으로 사용 가능한 CouchDB 서버에 직접 쓰지 못하게 할 이유가 있습니까? 이것은 기본적으로 CRUD 응용 프로그램이며 비즈니스 논리는 "작성자 만 자신의 게시물을 편집 할 수 있습니다"로 구성되므로 클라이언트 쪽 항목과 데이터베이스 사이에 계층이 필요하지 않습니다. CouchDB 측에서 유효성 검사를 사용하여 누군가가 가비지 데이터를 넣지 않도록하고 사용자가 자신의 _user 데이터 만 읽을 수 있도록 권한이 올바르게 설정되어 있는지 확인합니다. 렌더링은 AngularJS와 같은 방식으로 클라이언트 측에서 수행됩니다. 본질적으로 당신은 CouchDB 서버와 많은 "정적"페이지를 가질 수 있고 당신은 갈 수 있습니다. HTML 페이지를 제공 할 수있는 서버 측 처리는 필요하지 않습니다.
데이터베이스를 세계에 공개하는 것은 잘못된 것처럼 보이지만이 시나리오에서는 권한이 올바르게 설정되어있는 이유를 알 수 없습니다. 그것은 웹 개발자로서의 본능에 위배되지만 좋은 이유는 생각할 수 없습니다. 그렇다면 왜 이것이 나쁜 생각입니까?
편집 : 여기에 비슷한 토론이있는 것 같습니다 : 웹 "서버 이하"응용 프로그램 작성
편집 : 지금까지 멋진 토론, 나는 모든 사람의 의견에 감사드립니다! CouchDB와 AngularJS를 구체적으로 호출하는 대신 몇 가지 일반적인 가정을 추가해야한다고 생각합니다. 따라서 다음과 같이 가정하십시오.
- 데이터베이스는 숨겨진 저장소에서 직접 사용자를 인증 할 수 있습니다
- 모든 데이터베이스 통신은 SSL을 통해 이루어집니다
- 데이터 유효성 검사 는 데이터베이스에서 처리 할 수 있지만 처리해서는 안됩니다.
- 우리가 관리자 기능 이외의 관심을 가지는 유일한 권한은 자신의 게시물 만 편집 할 수있는 사람입니다
- 모든 사람이 모든 데이터 (비밀번호 해시를 포함 할 수있는 사용자 레코드 제외)를 읽을 수 있다는 점에서 완벽합니다.
- 관리 기능은 데이터베이스 인증에 의해 제한됩니다
- 아무도 관리자 역할에 자신을 추가 할 수 없습니다
- 데이터베이스는 확장하기가 비교적 쉽습니다.
- 진정한 비즈니스 로직은 거의 없거나 전혀 없습니다. 이것은 기본 CRUD 앱입니다
DELETE FROM ImportantData;