【问题标题】:SecurityException error when calling CLR function "Revisited"调用 CLR 函数“Revisited”时出现 SecurityException 错误
【发布时间】:2019-02-17 13:28:56
【问题描述】:

我只在本地运行 SQL Server。 我正在使用 VS 2017 社区构建一个项目。 我创建了一个 CLR 程序,并将其作为程序集成功上传。 类和方法是公开的。 我创建了一个 SQL 标准 proc 以使用 permissions_set = external_access 调用 clr proc。 值得信赖已开启。 更改授权设置为 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();
    }
};

【问题讨论】:

    标签: sql-server multithreading security permissions sqlclr


    【解决方案1】:

    [SQLCLR] proc with permissions_set = external_access

    这就是问题所在。您正在使用线程,这要求 PERMISSION_SETUNSAFE

    此外,虽然 Visual Studio 在这方面提供的帮助很少,但通常不应将数据库设置为 TRUSTWORTHY ON。是的,这是解决这个烦人问题的简单方法,但它不是一个好的/长期的解决方法,尤其是对于生产而言。有一种方法(实际上是两种方法)可以正确设置以使用非对称密钥/强名称密钥或证书来处理安全性。这两种方法都可以在 Visual Studio / SQL Server Data Tools (SSDT) 的结构中工作。这里有一些信息(我在 S.O. 上的回答):

    CLR Strict Security on SQL Server 2017

    还有我的两篇博文,每篇都处理不同的方法:

    有关使用 SQLCLR 的更多信息,请访问:

    SQLCLR.org

    【讨论】:

    • 太棒了。非常感谢您的指导!
    • Solomon - 我想给你一个赞成票,但显然我对 StackOverflow 太陌生了,不允许这样做。我希望评论对您有所帮助。您是少数真正回答问题而不是询问更多无用细节的人之一!
    • @Coreysan 谢谢,没关系。是的,我认为你需要 20 分才能投票。再次,欢迎您。当然,我没有看到有人询问过这个问题的任何细节。无论哪种方式,很高兴信息有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多