SQL 인젝션 공격에서 본 모든 것은 매개 변수가있는 쿼리, 특히 저장 프로 시저의 쿼리가 이러한 공격을 막을 수있는 유일한 방법임을 암시하는 것 같습니다. 내가 암흑 시대로 돌아 왔을 때 저장 프로시 저는 관리가 덜한 것으로 보였기 때문에 좋지 않은 관행으로 여겨졌다. 덜 테스트 가능; 고도로 결합 된; 하나의 벤더에 시스템을 잠그고; ( 이 질문 은 다른 이유를 다룹니다).
내가 일할 때 프로젝트는 실제로 그러한 공격의 가능성을 알지 못했습니다. 다양한 종류의 손상으로부터 데이터베이스를 보호하기 위해 다양한 규칙이 채택되었습니다. 이러한 규칙은 다음과 같이 요약 될 수 있습니다.
- 클라이언트 / 응용 프로그램이 데이터베이스 테이블에 직접 액세스 할 수 없었습니다.
- 모든 테이블에 대한 모든 액세스는 뷰를 통해 이루어졌으며 기본 테이블에 대한 모든 업데이트는 트리거를 통해 수행되었습니다.
- 모든 데이터 항목에 도메인이 지정되었습니다.
- 데이터 항목을 무효화 할 수 없었습니다. 이것은 DBA가 때때로 치아를 연마하는 데 영향을 미쳤습니다. 그러나 집행되었다.
- 역할과 권한은 적절하게 설정되었습니다. 예를 들어 데이터를 변경할 수있는 권한을보기에만 제공하는 제한된 역할입니다.
이것과 같은 (강화 된) 규칙 세트는 (이 특정 세트는 아니지만) SQL 주입 공격을 방지하는 매개 변수화 된 쿼리에 대한 적절한 대안입니까? 그렇지 않다면 왜 안됩니까? 데이터베이스 (전용) 특정 조치를 통해 이러한 공격으로부터 데이터베이스를 보호 할 수 있습니까?
편집하다
최초의 응답에 비추어 질문의 강조는 약간 바뀌었다. 기본 질문은 변경되지 않았습니다.
편집 2
매개 변수화 된 쿼리에 의존하는 접근 방식은 시스템에 대한 공격을 방어하기위한 말초 단계에 지나지 않습니다. 더 기본적인 방어가 바람직하고 주입 공격에 대해 구체적으로 방어하기 위해 필요하지 않거나 덜 중요하지 않은 쿼리에 의존 할 수 있습니다.
내 질문에 암시적인 접근 방식은 데이터베이스 "갑옷"에 기반을 두 었으며 실행 가능한 옵션인지 알 수 없었습니다. 추가 연구에 따르면 그러한 접근 방식이 있음이 제안되었습니다. 이 유형의 접근 방식에 대한 몇 가지 포인터를 제공하는 다음 소스를 찾았습니다.
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
이 소스에서 얻은 주요 기능은 다음과 같습니다.
- 광범위한 보안 데이터 사전과 결합 된 광범위한 데이터 사전
- 데이터 사전에서 트리거, 쿼리 및 제약 조건 생성
- 코드 최소화 및 데이터 최대화
지금까지 내가 얻은 답변은 매우 유용하고 매개 변수가있는 쿼리를 무시하여 발생하는 어려움을 지적하지만 궁극적으로 그들은 원래 질문에 대답하지 않습니다 (현재 굵게 강조 표시).