FBA et SQL Server: Une histoire d'amour

Mon collègue a travaillé sur un composant WebPart dans un environnement de FBA. Entre autres choses, le composant WebPart tire des données de SQL server. Le grand plan de ce projet exige qu'un DBA configure la sécurité niveau de données dans SQL (par opposition à l'incorporation d'un ID utilisateur dans une requête SQL ou d'une autre approche).

Le problème est que SQL server ne sait rien notre environnement EEA, donc il ne peut pas nous faire confiance. Nous avons résolu ce problème en, faute d'un meilleur mot, passer manuellement pour un utilisateur AD afin que nous pourrions nous connecter à SQL telles que données SQL niveau sécurité travaux.

Bien qu'EEA est une fonctionnalité d'ASP.NET, nous, peuple de SharePoint Nation avons enseigné la recherche de divers moteurs que si vous vous interrogez pour FBA, vous voulez savoir comment configurer FBA dans SharePoint doit dire. Je n'ai pas trouver tout renseignement sur la façon d'activer un FBA orienté application ASP.NET pour communiquer avec SQL dans la façon dont nous avions besoin de trouver.

Dans le cadre des recherches sur ce, Nous re-lire cet article: Emprunt d'identité ASP.NET

Plus de recherche nous a conduit à cet article codproject: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

Qui nous a aidé à écrire notre code, qui j'ai inclus ci-dessous. Il n'est pas les trucs plus chics, mais cela a fonctionné. J'espère que vous trouverez utile.

Voici le code qui a fonctionné pour nous:

protégé Sub btnSearchCarrier_Click(ByVal sender, EventArgs e)
 {
 Essayez
 {
 ImpersonateUser UI = Nouveau ImpersonateUser();
 // TODO: Remplacer les informations d'identification iU.Impersonate(« DomainName », « Nom d'utilisateur », « Password »);

//
 CODE
//

 iU.Undo();
 }
 captures (System.Exception ex)
 {

 }
 }

// À l'aide de la classe de l'emprunt d'identité comme mentionné ci-dessous.

public classe ImpersonateUser
 {
 [DllImport(« advapi32.dll », SetLastError = True)]
 public statique extern bool LogonUser(
 Chaîne lpszUsername,
 Chaîne lpszDomain,
 Chaîne lpszPassword,
 int dwLogonType,
 int dwLogonProvider,
 Réf IntPtr phToken);

 [DllImport(« kernel32.dll », CharSet = CharSet.Auto)]
 privé extern statique bool CloseHandle(Handle IntPtr);

 privé statique IntPtr tokenHandle = Nouveau IntPtr(0);
 privé statique WindowsImpersonationContext impersonatedUser;

 // Si vous intégrer ce code dans une DLL, n'oubliez pas d'exiger qu'elle
 // fonctionne avec FullTrust.
 [PermissionSetAttribute(SecurityAction.Demand, Nom = « FullTrust »)]
 public Impersonate Sub(chaîne NomDomaine, String userName, mot de passe de chaîne)
 {
 Essayez
 {

 // Utilisez la fonction non managée LogonUser pour obtenir l'utilisateur jeton
 // l'utilisateur spécifié, domaine, et le mot de passe.
 const int LOGON32_PROVIDER_DEFAULT = 0;

 // En passant ce paramètre provoque LogonUser créer un jeton principal.
 const int LOGON32_LOGON_INTERACTIVE = 2;
 tokenHandle = IntPtr.Zero;

 // Étape -1 Appeler LogonUser pour obtenir un handle sur un jeton d'accès.
 bool returnValue = LogonUser(
 nom d'utilisateur,
 nom de domaine,
 mot de passe,
 LOGON32_LOGON_INTERACTIVE,
 LOGON32_PROVIDER_DEFAULT,
 Réf tokenHandle); // tokenHandle - nouveau jeton de sécurité

 Si (== false returnValue)
 {
 int ret = Marshal.GetLastWin32Error();
 Console.WriteLine(« Appel de LogonUser a échoué avec le code d'erreur : " +
 RET);
 jeter nouveau System.ComponentModel.Win32Exception(RET);
 }

 // Étape - 2
 WindowsIdentity newId = Nouveau WindowsIdentity(tokenHandle);
 // Étape -3
 impersonatedUser = newId.Impersonate();

 }
 captures (System.Exception ex)
 {
 Console.WriteLine("Exception s'est produite. " + ex.Message);
 }
 }


 /// <Résumé>
 /// Emprunt d'identité s'arrête
 /// </Résumé>
 public Undo Sub()
 {
 impersonatedUser.Undo();
 // Libérer les jetons.
 Si (tokenHandle != IntPtr.Zero)
 CloseHandle(tokenHandle);
 }
 }

</fin>

S'abonner à mon blog.

Tags Technorati:

Une réflexion sur "FBA et SQL Server: Une histoire d'amour

  1. David au début
    Désolé pour cette annonce question sans rapport mais je ne pourrait pas figurer dehors comment vous envoyer un email de ce blog.
    Vous avez eu un post précédent où vous offre une excellente façon de filtrer une bibliothèque pour afficher des données sans balise. Vous avez des idées quant à comment vous pourriez découvre une liste de documents non balisés dans une bibliothèque de document entier? À l'aide d'un champ vide dans la recherche avancée ne retourne pas de résultats.
    Réponse

Laisser une réponse

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *