2013-03-26 2 views
1

저는 웹 서비스 및 웹 API에 대해 새삼지 않습니다. 대부분의 회사가 기본적으로 데이터베이스에서 데이터를 가져 와서 선택한 형식으로 인코딩하는 XML 또는 JSON 기반 연결을 제공합니다. 내 질문은 왜 SQL 연결을 제공하는 사람이 보이지 않는가?SQL과 데이터 전송을위한 XML

처음에는 보안이라고 생각했습니다. 그러나 MySQL을 사용하면 사용자 액세스를 특정 열로 제한 할 수 있습니다. 사용자가 보거나 삽입 만 허용 할 수 있습니다. 조인을 수행하거나 실제 백엔드 구조를 베일하기 위해 뷰 및 저장 프로 시저를 만들 수 있습니다. ssl 연결을 사용하여 전송 된 데이터를 올바르게 인코딩 할 수 있습니다. 그래서 저는 정말로 유일한 차이점은 스타일이라고 생각합니다. 그것은 나에게 보인다 사람들은 오히려 나를 쓸 것

$conn->getWidgetAttr('widgetName'); 

아니라

보다는
SELECT widgetName FROM widgets; 

사람이 내가 여기에 누락 무엇을 말해 줄 수 있습니까?

답변

4
  1. 구성이 복잡합니다. 가능한 모든 사용 사례에 대해 모든 사용자에 대해 사용 권한을 구성하기가 어렵습니다.
  2. 보안. 데이터베이스 연결 및 쿼리 노출은 안전하지 않으며 SQL 주입/공격 공격 가능성이 높습니다.
  3. 계약 안정성. 데이터베이스에 저장된 항목이 기존 클라이언트를 손상시키지 않고 기본 저장소를 변경할 수있는 방법에 대한 구현 세부 정보 숨기기 예를 들어 한 번에 sql server를 mongodb로 바꿀 수 있습니다.
  4. 방화벽 문제. HTTP 연결은 널리 사용 가능하며 포트 80은 웹 API를 사용하는 대부분의 작업에 대해 열려 있지만 SQL Server 포트 (기본값 1433)를 노출하면 추가 배포 비용이 부과 될 수 있습니다.
+0

+1 API 버전 관리도 중요합니다. 기본 데이터 모델을 변경해야합니까? –

+0

보안을 제외한 모든 부분에 동의합니다. SQL 인젝션은 스크립트가 사용자로부터받은 입력을 적절하게 벗어나지 않고 사용자가 액세스해야하는 것보다 높은 권한을 가진 mysql 사용자가 실행하는 쿼리에 넣을 때 발생합니다. 예를 들어, mysql 사용자가 단일 테이블에서만 select를 선택하면 SQL 인젝션을 사용하지 않아도 쿼리는 해당 테이블에서 선택한 것 이외의 작업을 수행하지 않습니다. 그래도 구성의 복잡성만으로도 이와 같은 것을 구현하고 싶지는 않을 것입니다. 정보를 제공해 주셔서 감사합니다. –

관련 문제