이것은 약간의 개방형 질문이지만 인라인 SQL 스크립트가 표준 인 세계에서 자랐기 때문에 의견이 필요했습니다. 그런 다음 우리는 SQL 주입 기반 문제를 잘 알고 있었고 SQL이 얼마나 취약한 지 모든 곳에서 문자열 조작.
그런 다음 ORM에 대한 쿼리를 설명하고 자체 SQL을 생성하게하는 ORM이 시작되었습니다. 많은 경우에 최적이 아니지만 안전하고 쉬웠습니다. ORM 또는 데이터베이스 추상화 계층의 또 다른 좋은 점은 SQL이 데이터베이스 엔진을 염두에두고 생성 되었기 때문에 MSSQL, MYSQL과 함께 Hibernate / Nhibernate를 사용할 수 있으며 코드는 구성 세부 사항 만 변경하지 않았다는 것입니다.
현재 마이크로 ORM이 더 많은 개발자를이기는 것처럼 보이는 현재의 날로 빨리 나아가서 전체 인라인 SQL 주제에 대해 왜 U-Turn을 사용했는지 궁금했습니다.
나는 ORM 구성 파일이 없다는 아이디어를 좋아하고 쿼리를보다 최적의 방식으로 작성할 수 있지만 SQL 주입과 같은 오래된 취약점에 자신을 다시 열어 놓은 것처럼 느낍니다. 하나의 데이터베이스 엔진이므로 소프트웨어가 여러 데이터베이스 엔진을 지원하기를 원하면 더 많은 문자열 해커를 수행해야하며 코드를 읽을 수없고 취약하게 만듭니다. (누군가가 언급하기 전에 대부분의 경우 SQL 주입으로부터 보호하는 대부분의 마이크로 orm에서 매개 변수 기반 인수를 사용할 수 있음을 알고 있습니다)
이런 종류의 사람들에 대한 사람들의 의견은 무엇입니까? 이 시나리오에서는 Dapper를 Micro ORM으로 사용하고이 시나리오에서는 NHibernate를 일반 ORM으로 사용하지만 각 필드의 대부분은 매우 유사합니다.
같은 내가 기간 인라인 SQL소스 코드 내의 SQL 문자열입니다. 소스 코드에서 SQL 문자열에 대한 디자인 논쟁은 논리의 근본적인 의도에서 벗어나기 때문에 예전에는 정적으로 입력 된 linq 스타일 쿼리가 여전히 1 개의 언어로 인기를 얻었지만 C #과 Sql을 한 페이지에서 이제 원시 소스 코드에 2 개의 언어가 섞여 있습니다. 명확히하기 위해 SQL 주입은 SQL 문자열 사용과 관련된 알려진 문제 중 하나입니다. 이미 매개 변수 기반 쿼리에서 발생하는 것을 막을 수 있다고 언급했지만 SQL 쿼리가 소스 코드에 뿌리 내리는 것과 같은 다른 문제를 강조합니다. DB 벤더 추상화가 부족하고 문자열 기반 쿼리에서 캡처 시간 수준의 오류를 잃어 버릴 수 있습니다. 이러한 문제는 우리가 높은 수준의 쿼리 기능을 사용하여 ORM의 시작과 함께 단계적으로 처리 한 모든 문제입니다.
따라서 강조 표시된 개별 문제에 중점을 두지 않았으며 대부분의 Micro ORM이이 메커니즘을 사용함에 따라 소스 코드에 SQL 문자열을 직접 입력하는 것이 더 수용 가능해졌습니다.
다음은 몇 가지 다른 관점을 가진 비슷한 질문입니다. 마이크로 orm 컨텍스트가없는 인라인 SQL에 대한 자세한 내용입니다.
https://stackoverflow.com/questions/5303746/is-inline-sql-hard-coding