2013-02-18 3 views
0

아래 코드는 코딩 할 때 잘 작동합니다. IIS에 코드를 게시 한 다음 연결이 실패했습니다.IIS에서 배포 한 후 SQL 서버 연결에 실패 했습니까?

나는 코딩 할 때 자격 증명으로 내 창 로그인을 취하고 IIS에서 AppPool ID를 사용하고 있습니다. Windows 로그인 자격 증명을 connectionstring에 어떻게 전달할 수 있습니까?

Public Shared Function DbCollection(connectionString As String) As DatabaseCollection 
    Dim server As New Microsoft.SqlServer.Management.Smo.Server(connectionString) 
    Return server.Databases 
End Function 

오류 : 그것이 오류를 바탕으로

Login failed for user 'Domain\Computername$'. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.Data.SqlClient.SqlException: Login failed for user 
'Domain\Computername$'. 
+0

왜 하시겠습니까? 이러한 종류의 인증은이 목적에 맞는 서비스 계정을 사용하여 수행해야합니다. Windows 계정을 사용하고자하는 이유가 있습니까? 나는 당신이 정말로 당신의 신임장을 의미하는 것이 아니라, 인증 된 신원의 신임장이라고 가정하고 있습니다. –

+0

이 응용 프로그램은 사용자 한 명을 사용하기 때문에 컴퓨터에만 배포됩니다. – James123

+0

그래도 이럴 이유가 없습니다. 이러한 종류의 액세스에는 서비스 계정을 사용하는 것이 좋습니다. –

답변

0

@ smoore의 게시물에 추가되는 내용은 연결 문자열과 들어오는 연결을 허용하는 SQL Server의 구성에 따라 다릅니다. SQL 사용자 만 허용하도록 설정할 수 있지만 문제 설명과 비슷한 모양의 창은 허용하지 않습니다. 연결 문자열 (붙여 넣기 전에 사용자/암호를 익명화/삭제하십시오!) 및 SQL Server 인스턴스에서 허용하는 인증 모드에 대한 세부 정보를 제공 할 수 있습니까?

+0

연결 문자열은 'SQL Server 이름' – James123

+0

이므로 "통합 보안 = true"또는 "사용자 이름 =; 암호 =;" 태그? – DiskJunky

+0

Microsoft.SqlServer.Management.Smo.Server ($ strServer)는 – James123

1

가능성이 SQL은 여기에 ... IIS와 같은 상자에없는 구성에 따라 다른 가능한 옵션은 다음과 같습니다

  • 동일한 상자에서 SQL 인증과 SQL을 사용하지 않는 경우 HttpContext.CurrentUserimpersonating with those credentials으로 사용자 자격 증명을 가져올 수 있어야하지만, 시스템 설치 프로그램. 이미 ASP.Net의 가장 (가장) 설정 일 가능성이 있지만 서버가 일반 사용자의 자격 증명보다 IIS가 아닌 다른 상자에 있으면 다른 상자 (검색 용어 "NTLM one hop")로 이동할 수 없습니다.
  • 데이터베이스가 다른 서버에 있고 조직에서 이미 Kerberos 인증을 사용하고 있습니다. have to be authenticating with Kerberos을 다른 서버로 가장 할 수 있습니다. 이러한 인증이 구성되거나 허용되지 않으면 귀하의 경우에만 켜질 가능성이 없습니다.
  • Windows 인증을 사용하는 다른 서버의 데이터베이스 - 특정 사용자 계정 (또는 프로세스의 계정으로 실행하기 위해 Interop의 전체 집합과 함께 RevertToSelf)에서 모든 SQL 쿼리를 실행할 수 있습니다.
  • 데이터베이스 어디에서나 SQL 인증을 사용할 수 있습니다. 조직에서 OK 인 한 가장 쉬운 방법입니다. 이 방법을 사용하는 경우 구성 파일에서 연결 문자열을 암호화하는 것을 고려하십시오.
+0

+0 : 일반적으로 특정 사용자를 가장하는 것이 좋지만 일반적으로 ASP.Net의 기본값은 "현재 사용자"로 가장 할 필요가 없지만 "Windows 인증 + 명의 도용"입니다. Kerberos를 사용하는 것은 불가능합니다 (이미 설정하지 않은 경우). 특정 계정을 가장하거나 (자격 증명을 처리하기 위해 'RevertToSelf'로 되돌리기) 더 쉬울 수도 있습니다. Web.Config에 저장된 암호화 된 암호로 SQL 인증을 사용하는 것이 가장 쉬운 방법입니다. –

+0

Kerberos에 대한 그의 인증을 전환하는 것이 해결책이라고 제안하지 않았습니다. Kerberos를 이미 사용하고 있다면 그는 그렇게 할 수 있습니다. 또한 포스터에게 사용자의 자격 증명을 실제로 사용해야 할 수도 있고 서비스 계정을 사용하는 것이 허용되지 않을 수도 있다는 의심의 이익을 제공합니다. OP의 코멘트를 본 후에 나는 다른 대답을했을지 모르지만 그 당시에 나는 제시된 질문에 대답했다. –

+1

+1 - Kerberos에 대한 귀하의 진술을 잘못 읽었습니다.내가 편집 한 것을 확인했는지 확인해보십시오. 원래 게시물에 2 가지 사례가 있음을 분명히했습니다. (내 옵션도 추가 할 자유를 얻었습니다.) –

관련 문제