TSQL:执行CLR存储函数抛出System.Security.SecurityException错误

时间:2017-11-18 10:39:56

标签: c# sql-server tsql sqlclr

我需要将文件打包到TSQL脚本中的rar存档中。所以我从C#-script函数编译dll:

using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction()]
    static public SqlInt32 RarFiles(SqlString WORK, SqlString TARGET, SqlString SRC, SqlString SIZE)
    {
        ProcessStartInfo p = new ProcessStartInfo();
        p.FileName = @"C:\Program Files\WinRAR\rar.exe";
        p.Arguments = String.Format
        (
            "a -cfg- -ep1 -idcdp -m5 -r -s -v{0} {1} {2}",
            SIZE.ToString(),
            TARGET.ToString(),
            SRC.ToString()
        );
        p.WorkingDirectory = WORK.ToString();
        Process x = Process.Start(p);
        return x.ExitCode;
    }
}

使用命令:

%SYSTEMROOT%\Microsoft.NET\Framework64\v2.0.50727\csc.exe /target:library c:\test\rarfiles.cs

然后在TSQL中,我用代码创建了程序集:

ALTER AUTHORIZATION ON DATABASE::[Test] TO [sa]; 
GO
ALTER DATABASE [Test] SET TRUSTWORTHY ON
GO
CREATE ASSEMBLY [CLRFunctions]
FROM 'C:\test\RarFiles.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO
CREATE FUNCTION [dbo].RarFilesCLR
(
    @work [nvarchar](max),
    @target [nvarchar](max),
    @source [nvarchar](max),
    @size [nvarchar](max)
)
RETURNS INT
AS EXTERNAL NAME CLRFunctions.UserDefinedFunctions.RarFiles;
GO

最后,我正在尝试执行功能:

DECLARE @work nvarchar(max) = 'c:\test';
DECLARE @target nvarchar(max) = 'c:\test\res.rar';
DECLARE @source nvarchar(max) = 'c:\test\source';
DECLARE @size nvarchar(max) = '20M';
SELECT [dbo].RarFilesCLR(@work, @target, @source, @size);

抛出错误

System.Security.SecurityException: 
in UserDefinedFunctions.RarFiles(SqlString WORK, SqlString TARGET, SqlString SRC, SqlString SIZE)`...

有人可以向我解释这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

创建程序集时,需要使用UNSAFE作为权限集。您需要开始新的Process

此外,您应该发布整个错误消息,因为它经常提供有关正在发生的事情和/或要做什么的线索。只发布错误消息的第一小部分会使获取请求的帮助变得更加困难。

相关问题