FBA 및 SQL Server: 러브 스토리

내 동료는 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);
 }
 }

</끝>

내 블로그를 구독.

테크노 태그:

하나는 "에 대한 생각FBA 및 SQL Server: 러브 스토리

  1. 데이비드 일찍
    이 게시에 대 한 미안 관련 없는 질문 이지만 내가 알아낼 수 없습니다이 블로그에서 이메일을 보내는 방법.
    당신은 이전 게시물 태그 데이터를 보려면 라이브러리를 필터링 하는 좋은 방법을 제공 어디 했다. 당신은 어떤 생각 어떻게 전체 문서 라이브러리에 태그 없는 문서 목록을 볼 수 있나요? 고급 검색에 빈 필드를 사용 하 여 모든 결과 반환 하지 않습니다..
    회신

응답을 남기다

귀하의 이메일 주소는 공개되지 않습니다. 필요 입력 사항은 표시되어 있습니다 *