System.InvalidOperationException: невозможно выполнить утверждения CAS в прозрачных методах безопасности

У меня есть триггер SQL CLR, написанный на C# 4.0 и развернутый на SQL Server 2014. Всякий раз, когда вставка происходит в таблицу в SQL Server, работа этого триггера CLR заключается в импорте этой строки в базу данных Oracle. Таким образом, в основном мне приходится импортировать данные в базу данных Oracle всякий раз, когда запрос на вставку запускается для таблицы в SQL Server 2014. Это мой первый триггерный проект CLR SQL, и ниже показано, что я делаю:

[SecurityCritical]
[OraclePermission(System.Security.Permissions.SecurityAction.Assert, Unrestricted = true)]
[SqlTrigger(Name = "FetchSurvey", Target = "temp", Event = "FOR INSERT")]
public static void FetchSurvey()
{

    SqlTriggerContext triggerContext = SqlContext.TriggerContext;
    // Create result set to store data
    DataSet resultSet = new DataSet();
    // Create a new SQL command
    using (SqlCommand command = new SqlCommand("SELECT * FROM INSERTED"))
    {
        // Create a new SQL connection
        using (command.Connection = new SqlConnection("context connection=true"))
        {
            // Connect to the database
            command.Connection.Open();
            // Execute procedure
            using (SqlDataAdapter adapter = new SqlDataAdapter(command))
            {
                adapter.Fill(resultSet);
            }
            // Disconnect from the database
            command.Connection.Close();
        }
    }
    SqlPipe sqlP = SqlContext.Pipe;
    // Return data
    if (resultSet.Tables.Count > 0)
        SaveSurvey(resultSet);
    sqlP.Send("Finaly its done!!");
}
public static void SaveSurvey(DataSet dsSurvey)
{
using (OracleConnection con = new OracleConnection("my oracle connection string"))
    {
        if (con.State == ConnectionState.Closed)
            con.Open();
        DataRowView drv = dsSurvey.Tables[0].DefaultView[0];
        using (OracleCommand cmd = new OracleCommand("AddMetaData", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("V_id", drv["TemplateID"]);
            cmd.Parameters.AddWithValue("V_Title", drv["TemplateName"]);
            cmd.Parameters.AddWithValue("V_CreatedBy", drv["CreatedBy"]);
            cmd.Parameters.AddWithValue("V_IsActive", drv["IsActive"]);
            cmd.ExecuteNonQuery();
        }
    }
}

И это мой код для создания триггера сборки/развертывания:

CREATE ASSEMBLY   TriggerImportSurvey
FROM 'C:\ImportSurvey\SQL-CLR-Trigger.dll'
With Permission_Set = External_Access;

Теперь проблема заключается в том, что всякий раз, когда я запускаю запрос на вставку в SQL Server для вставки данных, я получаю следующую ошибку в SQL Server:

Сообщение 6522, уровень 16, состояние 1, процедура tri_InsertSurvey_clr, строка 18
Произошла ошибка .NET Framework во время выполнения определяемой пользователем подпрограммы или агрегата "tri_InsertSurvey_clr":

System.InvalidOperationException: Cannot perform CAS Asserts in Security Transparent methods
System.InvalidOperationException: 
  at Triggers.FetchSurvey()

tri_InsertSurvey_clr — это триггер, который отвечает за выполнение сборки всякий раз, когда я запускаю оператор вставки.

Пожалуйста, скажите мне, что мне не хватает, поэтому я получаю эту ошибку. Также, если есть более элегантный способ реализации триггера CLR SQL, пожалуйста, также предложите это.

ПРИМЕЧАНИЕ. Когда я пытался сохранить данные с помощью триггера в SQL Server, мне это удалось, но теперь, когда я пытаюсь сохранить их в базе данных Oracle, я получаю эту ошибку. Также база данных Oracle установлена ​​на другом компьютере.


person Jitender Kumar    schedule 29.07.2014    source источник
comment
Примечание: ваш триггер выглядит так, как будто он сломан, потому что, насколько я вижу, он предполагает, что inserted содержит ровно одну строку. Это не безопасное предположение. Он может содержать 0, 1 или несколько строк.   -  person Damien_The_Unbeliever    schedule 29.07.2014
comment
Спасибо @Damien_The_Unbeliever, я позабочусь об этом.   -  person Jitender Kumar    schedule 29.07.2014
comment
Если вы не можете выполнять утверждения в прозрачных для безопасности сборках, пытались ли вы сделать свою сборку критично для безопасности?   -  person cynic    schedule 29.07.2014
comment
Да, я сделал, но все равно получил ту же ошибку ..   -  person Jitender Kumar    schedule 29.07.2014
comment
Нужно ли утверждение в первую очередь? Что произойдет, если вы удалите атрибут [OraclePermission]?   -  person cynic    schedule 29.07.2014
comment
Если я уберу [OraclePermission] из кода, я получу ошибку Request for the permission of type 'System.Data.OracleClient.OraclePermission   -  person Jitender Kumar    schedule 29.07.2014