FBA і SQL Server: Історія кохання

Мій колега працює на веб-частини в FBA середовищі. Серед іншого, веб-частина отримує деякі дані з SQL server. Грандіозного плану для цього проекту диктує, що муніципалітет DBA настроює рівня безпеки даних в SQL (на відміну від вбудовування Ідентифікатор користувача у запиті SQL або іншого способу).

Проблема в тому, що SQL server не знає нічого про нашої FBA середовищі, так що вона не може довіряти нам. Ми вирішили цю проблему шляхом, за відсутністю кращого слова, вручну себе за оголошення користувача, так що ми могли підключитися до SQL така, що SQL дані рівня безпеки роботи.

Незважаючи на те, що FBA є особливістю ASP.NET, Ми SharePoint нації люди навчили, різних пошукових що якщо запитуваної FBA, Ви має означати, що ви хочете знати, як налаштувати FBA в SharePoint. Я не зміг знайти будь-яку інформацію щодо ввімкнення на FBA орієнтованих застосунку ASP.NET для спілкування з SQL таким чином, нам необхідно знайти.

В ході цього дослідження, Ми знову прочитайте цю статтю: ASP.NET уособлення

Додаткові дослідження привело нас до цієї статті codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Які допомогли нам записати наш код, який я включив нижче. Це не самий елегантний речі, але вона працювала. Я сподіваюся, що ви знайшли це корисним.

Ось код, що працював для нас:

захищений порожнеча btnSearchCarrier_Click(об'єкт відправника, EventArgs e)
 {
 Спробуйте
 {
 ImpersonateUser МО = нові ImpersonateUser();
 // TODO: Замінити облікові дані iU.Impersonate("Ім'я _ домену", "Ім'я користувача", "Пароль");

//
 КОД
//

 iU.Undo();
 }
 зловити (Виняток ex)
 {

 }
 }

// За допомогою уособлення класу, зазначених нижче.

громадських клас ImpersonateUser
 {
 [DllImport("advapi32.dll", SetLastError = Істина)]
 громадських статичні зовнішній bool LogonUser(
 Рядок lpszUsername,
 Рядок lpszDomain,
 Рядок lpszPassword,
 Int dwLogonType,
 Int dwLogonProvider,
 REF IntPtr phToken);

 [DllImport("Kernel32. dll", CharSet = CharSet.Auto)]
 приватні зовнішній статичні bool CloseHandle(IntPtr ручкою);

 приватні статичні IntPtr tokenHandle = нові IntPtr(0);
 приватні статичні WindowsImpersonationContext impersonatedUser;

 // Якщо включити цей код в бібліотеку DLL, Переконайтеся, що вимагають, щоб він
 // працює з FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Ім'я = "FullTrust")]
 громадських порожнеча уособити(рядок ім'я домену, рядок ім'я користувача, рядок пароль)
 {
 Спробуйте
 {

 // Некеровані LogonUser для функція отримати користувач маркер для
 // Указаний користувач, домен, та пароль.
 Константа Int LOGON32_PROVIDER_DEFAULT = 0;

 // Проходячи цей параметр викликає LogonUser створити основний.
 Константа Int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Крок -1 Зателефонувати LogonUser отримати дескриптор для необмеженого доступу.
 bool returnValue = LogonUser(
 ім'я користувача,
 ім'я домену,
 пароль,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 REF tokenHandle); // tokenHandle - новий маркер

 Якщо (ХИБНІСТЬ = = returnValue)
 {
 Int у відставці = Marshal.GetLastWin32Error();
 Console.WriteLine("LogonUser заходу завершилася з кодом помилки : " +
 у відставці);
 кинути нові System.ComponentModel.Win32Exception(у відставці);
 }

 // Крок - 2
 WindowsIdentity newId = нові WindowsIdentity(tokenHandle);
 // Крок -3
 impersonatedUser = newId.Impersonate();

 }
 зловити (Виняток ex)
 {
 Console.WriteLine("Стався виняток. " + EX.Повідомлення);
 }
 }


 /// <резюме>
 /// Зупинки уособлення
 /// </резюме>
 громадських порожнеча скасувати()
 {
 impersonatedUser.Undo();
 // Безкоштовні жетони.
 Якщо (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</кінець>

Підписатися на мій блог.

Бірки Technorati:

Одна думка про «FBA і SQL Server: Історія кохання

  1. Девід рано
    Вибачте за розміщення цього питання не пов'язані, але я не міг зрозуміти як надіслати вам повідомлення електронної пошти з цього блогу.
    Ви мали попередній пост, де ви запропонували відмінний спосіб, щоб відфільтрувати бібліотеки для перегляду даних без тегів. У вас є будь-які думки про те, як ви може переглянути список документа без тегів у всьому документі бібліотеки? Використовуючи пусті поля в розширений пошук не дав жодних результатів.

Дати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *