2010-07-19 13 views
0

Je souhaite utiliser la fonction table CLR dans SQL Server 2008, qui accède à une base de données depuis l'intérieur. J'ai une exception d'autorisation. J'essaye d'exécuter la fonction comme le même utilisateur que sous lequel il a été créé. Donc, la cause du problème n'est pas clair ..SQL Server 2008: exception lors de l'exécution de la fonction CLR qui tente d'accéder à la base de données via une connexion

Voici la fonction:

public partial class MyClass 
    {  
     [SqlFunction(
      DataAccess = DataAccessKind.Read, 
      FillRowMethodName = "Availability_FillRow", 
      TableDefinition = "B0RID nchar(32)")] 
     public static IEnumerable Fn_SEARCH_Availability(SqlDateTime checkin, SqlInt32 overnights) 
     { 
      if (checkin.IsNull || overnights.IsNull) 
      { 
       return null; 
      } 
      List<ResultRoom> roomsResultList = new List<ResultRoom>(); 


     using (SqlConnection conn = new SqlConnection("Data Source=MachineName;Initial Catalog=DBNANE;Integrated Security=True")) 
     { 
      conn.Open(); 
     } 
     return roomsResultList; 
    } 
} 

Voici l'exception

A .NET Framework error occurred during execution of user-defined routine or aggregate "Fn_SEARCH_Availability": 
System.Security.SecurityException: Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. 
System.Security.SecurityException: 
    at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) 
    at System.Security.PermissionSet.Demand() 
    at System.Data.Common.DbConnectionOptions.DemandPermission() 
    at System.Data.SqlClient.SqlConnection.PermissionDemand() 
    at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at StoredProcedures.Fn_SEARCH_Availability(SqlDateTime checkin, SqlInt32 overnights) 

Répondre

5

Peut-être essayer de changer l'instruction à l'aide qui établit la connexion à

using (SqlConnection conn = new SqlConnection("context connection=true;")) 

Ce qui indique au CLR d'utiliser la connexion SQL actuelle. Je suppose que la raison de votre échec est que, en spécifiant la sécurité intégrée, il utiliserait les informations d'identification du compte du service SQL Server.

Plus d'informations sur ce here

+0

Merci, c'était la bonne réponse – Tim