2014-10-05 2 views
1

구성중인 소프트웨어에 문제가 있습니다. 필자는 소스 코드에 액세스 할 수 없으며 config 만 액세스 할 수 있습니다.sp_executesql 변수를 이스케이프 처리하려고합니다.

문제는 다음과 같습니다. 구성에서 소프트웨어는 문자열을 입력 할 것으로 예상하지만 문자열을 비교에서 제외하고 대신 funtion을 실행합니다. 패턴이 고급 명확 defind하지 않기 때문에,

exec sp_executesql N'SELECT * FROM dummyTable WHERE (Name LIKE @Pattern)',N' 

이 내 설정에서 작동하지 않습니다

는 SQL 프로파일 러를 사용하여 나는 이런 식으로 뭔가를 얻을. 패턴으로 전달 된 변수 을 가져 와서 SQL 함수를 실행해야하지만 어떻게 계산할 수는 없습니다. 일반적으로 Pattern에는 "1"의 예에서 단일 문자가 들어 있습니다. 이스케이프 문자를 사용하고 내 함수를 실행하려면 패턴 변경 시도했지만 someting 누락 된 것 같아요 (모든 가능하다면). 다음과 같이 내가 설정에서 전송 한 변수는 다음과 같습니다

{0}' or Name like dbo.RunCalulation({0}) 

나에게주는 다음

'…@Pattern nvarchar(43)',@Pattern=N'1'' or Name like dbo.RunCalulation(1) ' 

이 실행 만 응답을 제공하지 않기 때문에, 나는 esacpe의 문자하지 않는 생각 작업을 수행하고 전체 문자열을 이름과 비교합니다.

내가 진짜이에 붙어있어 누군가가 내가 소스 코드를 가지고 있지 것은 진짜 문제는 여기에 것을 알고 (무엇을해야 하는지를 좋은 생각을 가지고 있기를 바랍니다. query parameters의 큰 장점

답변

1

하나 (예 : @Pattern) 그들은 당신이) 무엇을하려고하다 (protect againstSQL injection 도움을 줄 것이다.

그래서 대답은 당신이 원하는 것을 할 수 없다는 것입니다. @Pattern 매개 변수를 탈출하고 자신의 SQL의 일부를 추가 할 수있는 방법은 없습니다 이 쿼리에 대해서는 @Pattern으로 전달되는 모든 데이터가 데이터로 해석되므로 결코 SQL 명령 텍스트로 해석되지 않습니다 (이것이 왜 귀하의 SQL 텍스트가 작은 따옴표 안에서 끝나며 왜 따옴표가 자동으로 ''으로 이스케이프됩니다.).

+0

안녕하세요, 매우 빠른 답장을 보내 주셔서 감사합니다. 이것은 내가 두려워했던 것입니다. 누군가가 오래된 코드를 파고 들기를 바랍니다. – user3419063