Ошибка SecurityException при вызове функции CLR «Revisited» - PullRequest
0 голосов
/ 12 сентября 2018

Я использую SQL Server только локально. Я строю проект с сообществом VS 2017. Я создал процедуру CLR и успешно загрузил ее как сборку. Класс и метод общедоступны. Я создал стандартную процедуру SQL для вызова процедуры clr с permissions_set = external_access. Надежность включена. Изменение разрешения установлено на sa.

Все, что он делает, это исполняет файл bat: cmd.exe c: \ temp \ test.bat

Но я все еще получаю ошибку 6522 Исключение безопасности.

Когда я запускаю метод как консольное приложение, он отлично работает. Но в SQL Server не ходи.

Буду очень признателен за любой совет - это моя первая попытка с CLR.

Code:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Diagnostics;
using System.Text;


public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void RunTestBat()
    {
        ProcessStartInfo pPStartInfo = new ProcessStartInfo("cmd.exe");
        pPStartInfo.WorkingDirectory = @"C:\Temp";

        pPStartInfo.UseShellExecute = true;
        pPStartInfo.Arguments = string.Format(@" /C test.bat");

        Process p = new Process();
        p.StartInfo = pPStartInfo;        
        p.Start();
        p.WaitForExit();
    }
};

1 Ответ

0 голосов
/ 12 сентября 2018

[SQLCLR] proc с permissions_set = external_access

В этом проблема.Вы используете многопоточность, для которой PERMISSION_SET должно составлять UNSAFE.

. Кроме того, хотя Visual Studio предлагает небольшую помощь в этой области, обычно вам не следует устанавливать для вашей базы данных значение TRUSTWORTHY ON.Да, это простое решение для этой надоедливой проблемы, но это не хорошее / долгосрочное решение, особенно для производства.Существует способ (на самом деле два способа) правильно настроить систему, чтобы использовать асимметричный ключ / ключ строгого имени или сертификат для обеспечения безопасности.Оба подхода могут быть использованы для работы в структуре Visual Studio / SQL Server Data Tools (SSDT).Некоторая информация здесь (мой ответ здесь, на SO):

CLR Strict Security на SQL Server 2017

И два моих сообщения в блоге, каждое из которых посвящено различнымподход:

Для получения дополнительной информации о работе с SQLCLR в целом посетите:

SQLCLR.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...