2013-01-23 4 views
2

기존 서버에서 릴리스해야하는 기존 ASP 응용 프로그램이 있습니다. SQLOLEDB와 함께 ADO를 사용하여 MS SQL Server와 통신합니다. 사용자 이름과 암호로 SQL에 로그온하고 있습니다.ADO Connection.ConnectionString이 더 이상 자격 증명을 반환하지 않습니다.

응용 프로그램은 변경된 것으로 보이는 ADO Connection 개체의 고유 한 동작에 의존합니다. 요즘 (ADODB.Connection.6에서) Connection 문자열을 Connection에 제공 한 다음 다시 검색하면 원래 문자열의 정확한 사본을 얻지 못합니다. 특히, 사용자 이름과 암호가 제거되고 일부 추가 매개 변수가 추가됩니다.

이전 버전의 ADO가이 시나리오에서 자격 증명을 제거하지 않은 것처럼 보입니다. 응용 프로그램이 작동하면 응용 프로그램이 작동하지 않으며 작동합니다. 질문 -이 내용이 문서화되어 있습니까? 새 ADO에서 레거시 동작을 적용 할 수있는 방법이 있습니까?

공유 서버에서 ADO를 다운 그레이드하고 싶지 않습니다.

EDIT : 최소한의 테스트 케이스로 분리했습니다. Windows 2003의 Connection.2.80 (msado15.dll v2.82.5011.0)에서 작동하고 Windows 2008의 Connection.6 (dll v.6.1.7600.17036)에서 실패합니다.

EDIT2 : 공식적으로 ADO가 일부인 이전 MDAC 2.8은 Vista 이상에서 지원되지 않습니다. 따라서 다운 그레이드는 실제로 옵션이 아닙니다.

+1

이 말은 할 필요가 없지만 응용 프로그램이 실제로이 동작에 의존해서는 안됩니다. –

+0

그런 다음 'i-did-not-code-this'라는 태그를 소개합니다. :) 아니면 단지'유산'. 나는 그렇게해서는 안된다는 것을 안다. 하지만 그렇습니다. –

답변

5

당신이 찾고있는 것은 아마도 "보안 정보 유지"속성 일 것입니다. 이 속성은 herehere (SQLOLEDB 공급자를 사용하고 있다고 가정하고 있지만 다루었지만 대부분의 공급자는이 점에서 동일하게 동작 함)에 설명되어 있습니다. 기본적으로이 속성을 False으로 설정하면 읽기와 같이 암호와 같은 중요한 정보가 연결 문자열에서 제거됩니다. 반대로 속성을 True으로 설정하면 연결 문자열이 정확하게 제공된대로 반환됩니다 (중요한 정보 포함).

나는 하나의 blog post (하지만 공식 문서)이 속성의 기본값은 윈도우 서버 2008이 당신의 관찰과 일치에 해당하는 것입니다 윈도우 비스타에서 FalseTrue 변경한다고 발견했다.

새로운 기본값 인 False은 실수로 민감한 정보가 누출 될 위험이 적으므로 더욱 안전하다고 간주됩니다. 여기서 권장되는 해결책은 응용 프로그램을 다시 설계하여 ConnectionString 속성에서 암호를 다시 가져올 필요가 없도록하는 것입니다.

그런 면책 조항이있는 상태에서 연결 문자열을 통해 "보안 정보 유지"속성을 명시 적으로 설정할 수 있습니다 (;Persist Security Info=True). 또한 연결 문자열을 변경할 수없는 경우를 대비하여 객체를 열기 전에 Connection 객체에서 속성을 설정할 수도 있지만 작동하는지 완전히 확신 할 수는 없습니다 (수동으로 Provider 속성을 설정해야 할 수도 있음). 먼저).

' untested examples 

' Method 1 
connString = "Provider=SQLOLEDB;" 
connString = connString & "Data Source=example;" 
connString = connString & "Initial Catalog=exampleDB;" 
connString = connString & "User Id=user;" 
connString = connString & "Password=1234;" 
connString = connString & "Persist Security Info=True" 

Set conn = Server.CreateObject("ADODB.Connection") 
conn.Open connString 

' Method 2 
connString = "Data Source=example;" 
connString = connString & "Initial Catalog=exampleDB;" 
connString = connString & "User Id=user;" 
connString = connString & "Password=1234;" 

Set conn = Server.CreateObject("ADODB.Connection") 
conn.Provider = "SQLOLEDB" 
conn.Properties("Persist Security Info").Value = True 
conn.Open connString 
+0

그게 전부 야. 나는 이미 연결 문자열을 읽는 것에 의존하지 않는 코드를 패치했다. (다른 이유도있다.)하지만 정확히 맞다. –

+1

기록을 위해 필자는 Win7에서 오해 한 관련이없는 VB/ADO 프로젝트에서 동일하게 작동했으며 "Persist Security Info = True"는 꼭 필요한 마법 피임약이었습니다. 내가 할 수 있다면 다시 한 번 +1하겠다. –

관련 문제