【问题标题】:SQL Server 2008: Exception when excecuting CLR function which tries to access database through a connectionSQL Server 2008:执行尝试通过连接访问数据库的 CLR 函数时出现异常
【发布时间】:2010-07-19 15:52:47
【问题描述】:

我想在 SQL Server 2008 中使用 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)

【问题讨论】:

    标签: sql-server sql-server-2008 clr sqlclr


    【解决方案1】:

    也许尝试更改建立连接的 using 语句到

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

    这告诉 CLR 使用当前的 SQL 连接。

    我对您失败的原因的猜测是,通过指定集成安全性,它将使用 SQL Server 服务帐户的凭据。

    更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-19
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2011-09-02
      • 1970-01-01
      • 2020-12-31
      相关资源
      最近更新 更多