0

内部からデータベースにアクセスするSQLServer2008でCLRテーブル値関数を使用したいと思います。許可の例外があります。作成時と同じユーザーで機能を実行しようとしています。したがって、問題の原因は明確ではありません。

関数は次のとおりです。

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;
    }
}

これが例外です

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)
4

1 に答える 1

5

たぶん、への接続を確立するusingステートメントを変更してみてください

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

これは、CLRに現在のSQL接続を使用するように指示します。

失敗した理由についての私の推測は、統合セキュリティを指定することにより、SQLServerサービスアカウントの資格情報を使用することになるということです。

これに関する詳細はこちら

于 2010-07-19T16:05:14.017 に答える