2010-03-23 5 views
11

배경 : 내가 (Z : 네트워크 드라이브에있는 파일에서네트워크 드라이브에있는 파일에 액세스하면

이 내 사무실 도메인의 위대한 작품을 읽을 수있는 응용 프로그램을 가지고, 그러나 그것은 작동하지 않습니다 사이트 (다른 ​​도메인에 있음). 멀리 나는 도메인 사용자와 네트워크 드라이브가 동일한 방식으로 설정되어 있다고 말할 수 있지만 고객 도메인의 사용자 등은 액세스 할 수 없습니다.

네트워크 드라이브에 액세스 할 수 없을 때 사용자 토큰이 필요하다고 생각했습니다.

[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 

... 지금 여기

const string userName = "USER"; 
const string pass = "PASS"; 
const string domainName = "VALIDDOMAIN.local" //tried with valid domain name and with null, same result 
const int LOGON32_PROVIDER_DEFAULT = 0; 
const int LOGON32_LOGON_INTERACTIVE = 2; 

IntPtr tokenHandle = new IntPtr(0); 

bool returnValue = LogonUser(userName, domainName, pass, 
      LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
      ref tokenHandle); 

if (!returnValue) 
    throw new Exception("Logon failed."); 

WindowsImpersonationContext impersonatedUser = null; 
try 
{ 
    WindowsIdentity wid = new WindowsIdentity(tokenHandle); 
    impersonatedUser = wid.Impersonate(); 

} 
finally 
{ 
    if (impersonatedUser != null) impersonatedUser.Undo(); 
} 

이 재미있는/이상한 부분이 내가 사용자를 impersionate 방법이다. 내 네트워크에서 응용 프로그램은 이미 네트워크 드라이브에 액세스 할 수 있으며, 활성 사용자 (동일한 도메인을 포함하여 정확히 동일한 사용자)로 가장하면 네트워크 드라이브에 액세스 할 수 없습니다. 내가 아무 생각이 어떻게 작동하고 무엇을,이 사이트에서 작동하지, 그리고 점에 더 않는이없는 지금부터

이 나를 무기력 잎?

무엇이 누락 되었습니까?

편집 : 나는 없이는처럼 그 후 나는 같은 사용자 이름을 사용하려면 null을 입력 시도 그래서, 나는 유효한 도메인 이름을 입력 시도하고 작동하지 않았다 :이 동안 원래 질문을 쓰는 것을 잊었 이 코드는 (우리 도메인에서 기본적으로 작동하기 때문에) 이것은 도움이되지 않았고 domain = null 인 방법입니다. 이 질문에 결국.

+3

저는 수퍼 유저들 (이 코드가 있기 때문에) 역전을 주장 할 것입니다. – Codesleuth

+0

이 코드를 실행하는 계정에 드라이브에 대한 읽기 권한을 부여하지 않는 이유는 무엇입니까? 그러면 코드가 다음과 같이됩니다 :'File.ReadAllBytes (filePath); ' – ChaosPandion

+0

나는 비슷한 질문을 한 번했습니다. 당신은 유용 할 수 있습니다 : http://stackoverflow.com/questions/659013/accessing-a-shared-file-unc-from-a-remote-non-trusted-domain-with-credentials – Randolpho

답변

6

일부의 생각 :

  • 코드에서 네트워크 리소스에 액세스 할 논리 드라이브 경로를 사용하지 마십시오. UNC 경로를 항상 사용하십시오 (예 : \\SERVER\Share\Filename.ext).
  • 로컬 보안 정책의 로그온/로그 오프 이벤트 감사를 사용하면 가장 방법을 호출 할 때 실패/성공을 매우 자세히 추적 할 수 있습니다.
  • 자신의 도메인에서 다른 도메인의 계정과 동일한 사용자 이름 및 비밀번호를 가지고 있습니다. 도메인을 인증하고 통과 인증을 사용하면 다른 도메인의 네트워크 공유에 액세스 할 수 있습니다.
+0

UNC 경로를 테스트합니다. 그러나 나는 당신이 도메인에 대해 나를 오해 한 것 같아. 테스트 환경에는 두 개의 별도 도메인이 있고 서로 통신하지 않는 사이트에는 두 개의 도메인이 있습니다. 양측에서 사용자는 액세스하려는 도메인에 있습니다. –

+0

또한, 나는 UNC 경로가있을 것이라고 확신하지는 않습니다. 고객 시스템 관리자가 도메인 사용자를 설정하여 매핑 된 네트워크 드라이브를 가질 수 있습니다. 계속 UNC에 접속할 수 있습니까? –

0

바보 같지만 드라이브에 액세스하는 방식을 변경하려고 시도 했습니까? 드라이브의 정보를 볼 수있는 가상 핸들러를 설치하십시오. 예를 들어 SSH?

관련 문제