2010-10-26 7 views
3

-je obtenir des informations auprès des utilisateurs dans la base de données qui sont stockées sur Active Directory, j'ai une fonction simple à faire:CLR procédure stockée SQL pour interroger Active Directory

using (DirectoryEntry de = new DirectoryEntry("LDAP://ANYGIVENDOMAIN")) 
{ 
    using (DirectorySearcher adSearch = new DirectorySearcher(de)) 
    { 
     adSearch.Filter = "(sAMAccountName=jdoe)";     
     SearchResult adSearchResult = adSearch.FindOne(); 

     StringBuilder sb = new StringBuilder(); 
     sb.AppendLine(adSearchResult.Properties["displayname"][0].ToString()); 
     sb.AppendLine(adSearchResult.Properties["givenName"][0].ToString()); 
     sb.AppendLine(adSearchResult.Properties["objectSid"][0].ToString()); 
     sb.AppendLine(adSearchResult.Properties["description"][0].ToString()); 
     sb.AppendLine(adSearchResult.Properties["objectGUID"][0].ToString()); 
    } 
} 

Exécution d'un WinForm fait ce que je veux, mais dans le type de projet SQL Server, je ne peux pas ajouter l'espace de noms System.DirectoryServices aux références.

Quelqu'un sait pourquoi?

Cordialement

JE

+0

Tout comme aparté - si je vous, j'assurez-vous de vérifier ** ** si une propriété donnée est présent ou pas; 'if (adSearchResult.Properties [" ... "]! = null) .... parce que sinon, vous obtiendrez très certainement des exceptions de pointeur NULL tôt ou tard .... –

Répondre

2

Voir: Supported .NET Framework Libraries

Unsupported libraries can still be called from your managed stored procedures, triggers, user-defined functions, user-defined types, and user-defined aggregates. The unsupported library must first be registered in the SQL Server database, using the CREATE ASSEMBLY statement, before it can be used in your code. Any unsupported library that is registered and run on the server should be reviewed and tested for security and reliability.

For example, the System.DirectoryServices namespace is not supported. You must register the System.DirectoryServices.dll assembly with UNSAFE permissions before you can call it from your code. The UNSAFE permission is necessary because classes in the System.DirectoryServices namespace do not meet the requirements for SAFE or EXTERNAL_ACCESS. For more information, see CLR Integration Programming Model Restrictions and CLR Integration Code Access Security .

+0

Merci je regarde dans cette documentation et semble que c'est exactement ce dont j'ai besoin. – JorgeEscobar

+0

J'ai fait tout le nécessaire, maintenant j'obtiens cette erreur: Une erreur .NET Framework s'est produite pendant l'exécution de la routine définie par l'utilisateur ou l'agrégat 'GetInformationFromActiveD' System.Security.SecurityException: Demande d'autorisation de type 'System. DirectoryServices.DirectoryServicesPermission, System.DirectoryServices, Version = 2.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a 'a échoué. System.Security.SecurityException: à StoredProcedures.getUserInfoFromActiveDirectory (SqlString nomUtilisateur, domaine SqlString, SqlString & description, SqlString & displayName) Autorisations? À partir de winforms cela fonctionne – JorgeEscobar

+0

Il s'avère que je dois rendre mon assembly aussi dangereux, cela fait l'affaire. Donc en résumé 1. ajouter l'assembly pour directoryservices comme étant dangereux (en changeant aussi les permissions dignes de confiance sur la base de données) 2. ajouter l'assembly qui l'utilise aussi comme étant dangereux 3. Appréciez Espérons que ceci aide quelqu'un d'autre. Et merci aussi à Joe en me montrant la bonne direction. :) – JorgeEscobar

Questions connexes