2012-09-27 2 views
1

SQL Server에 대한 사용 권한이있는 도메인 계정으로 실행되는 IIS에서 호스팅되는 웹 서비스가 있습니다. 아래에 언급 된 모든 사용자는이 SQL Server에 액세스 할 수 있습니다. 나는 서비스 계정으로 데이터베이스에 하나의 호출을 만들 수 있도록하고자하는 특정 서비스 방법 중호출자로 가장하면 데이터베이스에 연결할 수 없습니다 (명백한 사용 권한 문제는 아님)

<basicHttpBinding> 
<binding name="SecureWebBinding"> 
<security mode="TransportCredentialOnly"> 
<transport clientCredentialType="Windows" /> 

... 등

: 여기

는 서비스 설정의 단편 다른 하나는 서비스를 호출 한 사용자입니다 (호출하는 사용자가 작성한 FILESTREAM 트랜잭션 컨텍스트를 반환합니다 - 사용자 별입니다). 첫 번째 호출은 완료되지만 다음과 같이 두 번째는 포장한다 :

using (ServiceSecurityContext.Current.Impersonate()) 
{      
    using (var connection = new SqlConnection(...Integrated Security = true...) 
    { 
     connection.Open(); //<---Exception 

WindowsIdentity.GetCurrent()가 제대로 호출하는 사용자보다는 ImpersonationLevel == Identification와 서비스 계정을 반환 Impersonate에 전화 후.

처음 두 줄을 제거하면 작업이 서비스 계정의 ID로 완료됩니다. 물론 나중에 FILESTREAM에 대한 호출이 실패합니다.

+0

이 위임 대 도용의 문제가 될 수 나타나면 SQL로 서버가 다른 상자에 있습니다. 그렇다면 어떻게 % # $ @을 위임합니까? – playtime222

답변

0

가장 할 때 Kerberos를 사용하여 서버에 대한 SPN을 DB에 설치해야합니다. 그러나 그것은 당신이 받고있는 오류 메시지에 달려 있습니다. 메신저는 여전히 유사한 과정에 대한 문제로 실행하지만이 자원은 당신을 도움이 될 것입니다,하지만이 작업을해야처럼 프로세스가 보인다

http://blogs.msdn.com/b/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx