내 동료는 FBA 환경에서 웹 파트에 일하고 있다. 다른 것 들 중, 웹 파트는 SQL server에서 일부 데이터를 당긴 다. 이 프로젝트에 대 한 원대한 계획 지시 DBA가 SQL에서 데이터 수준 보안을 구성 (SQL 쿼리 또는 다른 접근에 사용자 ID를 포함에 반대).
문제는 SQL server 모르는 우리의 FBA 환경에 대해 아무것도 그래서 그것은 우리를 믿을 수 없다는. 이 문제를 해결 하는 우리, 더 나은 단어의 부족, 우리가 SQL 데이터 수준 보안 작동 되도록 SQL에 연결할 수 있도록 수동으로 광고 사용자 가장.
비록 FBA는 ASP.NET 기능, 우리 SharePoint 나라 사람들이 가르쳐 다양 한 검색 엔진을 당신이 FBA를 쿼리 하는 경우, SharePoint에서 FBA를 구성 하는 방법을 알고 하려는 의미 합니다.. 찾을 수 없습니다는 FBA를 사용 하도록 설정 하는 방법에 대 한 정보 중심 우리가 필요 방식으로 SQL와 통신 하는 ASP.NET 응용 프로그램 찾기.
이것을 연구 하는 과정에서, 우리는 다시이 문서를 읽으십시오: ASP.NET 가장
더 많은 연구가이 codproject 문서 우리을 이끌어: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
우리가 우리의 코드를 작성 도움이, 아래 포함 되어 있는. 그것은 가장 우아한 물건, 그러나 그것은 작동 했다. 난 당신이 도움이 되기를 바랍니다..
다음은 우리를 위해 일 하는 코드:
보호 void btnSearchCarrier_Click(개체 보낸 사람, EventArgs e) { 시도 { ImpersonateUser iU = 새로운 내용 ImpersonateUser(); // TODO: 대체 자격 증명 iU.Impersonate("도메인 이름", "사용자 이름", "비밀 번호"); // 코드 // iU.Undo(); } catch (예외 예) { } } // 아래에 언급 된 가장 클래스를 사용 하 여. 공용 클래스 ImpersonateUser { [DllImport("advapi32.dll", SetLastError = true)] 공용 정적 extern bool LogonUser( 문자열 lpszUsername, 문자열 lpszDomain, 문자열 lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 개인 extern 정적 bool CloseHandle(IntPtr 핸들); 개인 정적 IntPtr tokenHandle = 새로운 내용 IntPtr(0); 개인 정적 WindowsImpersonationContext impersonatedUser; // DLL에이 코드를 통합 하는 경우, 그것을 요구 해야 합니다. // FullTrust 실행. [PermissionSetAttribute(SecurityAction.Demand, 이름 = "FullTrust")] 공용 void 가장(도메인 이름 문자열, 문자열 이름, 문자열 암호) { 시도 { // 관리 되지 않는 LogonUser 함수를 사용 하 여 사용자에 대 한 토큰을 얻으려면 // 지정 된 사용자, 도메인, 그리고 비밀 번호. const int LOGON32_PROVIDER_DEFAULT = 0; // 이 매개 변수를 전달 하면 기본 토큰을 만들려면 LogonUser. const int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // 단계 -1 액세스 토큰에 대 한 핸들을 얻기 위해 LogonUser를 호출. bool returnValue LogonUser =( 사용자 이름, 도메인 이름, 비밀 번호, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle); // tokenHandle - 새 보안 토큰 만약 (returnValue false = =) { int ret = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser를 호출 하지 못했습니다 오류 코드 : " + ret); 던져 새로운 보려면.Win32Exception(ret); } // 단계 - 2 WindowsIdentity newId = 새로운 내용 WindowsIdentity(tokenHandle); // 단계 -3 impersonatedUser = newId.Impersonate(); } catch (예외 예) { Console.WriteLine("예외 발생. " + 전입니다.메시지); } } /// <요약> /// 중지 가장 /// </요약> 공용 무효 취소() { impersonatedUser.Undo(); // 무료 토큰. 만약 (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</끝>