Проблемы безопасности в интеграции SQLCLR с Visual C # - PullRequest
0 голосов
/ 17 июня 2011

Я работаю над интеграцией SQLCLR с Visual C # 2010, я пытаюсь сделать следующее: у меня есть папка, содержащая некоторые изображения, моя функция, перебирает файл в папке и получает базовую информацию о файле, такую ​​как высота ширина и т. д.

я создал dll из Visual C # 2010 и добавил как сборку в Sql Server 2008, а также создал функцию, но когда я пытаюсь выбрать функцию, я получаю ошибку ниже.

A .NET Framework error occurred during execution of user-defined routine or aggregate "fn_GetFiles":   
System.Security.SecurityException: Request failed.  
System.Security.SecurityException:   
   at UserDefinedFunctions.GetFileList(String FolderPath)  
   at UserDefinedFunctions.GetFileInfo(String folderPath)

ниже моя функция .net ..

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]  
public partial class UserDefinedFunctions  
{  
    [SqlFunction(FillRowMethodName = "FillRow")]  
    public static IEnumerable GetFileInfo(string folderPath)  
    {  
        // Put your code here
        return GetFileList(folderPath);
    }

    public static ArrayList GetFileList(string FolderPath)
    {
        ArrayList li = new ArrayList();
        foreach (String s in Directory.GetFiles(FolderPath, "*.jpg"))
        {
            FileInfo info = new FileInfo(s);
            object[] column = new object[3];
            column[0] = Path.GetFileName(s);
            column[1] = info.Length;
            column[2] = s;

            li.Add(column);
        }
        return li;
    }

    private static void FillRow(Object obj, out string filename, out string fileSize, out string filePath)
    {
        object[] row = (object[])obj;
        filename = (string)row[0];
        fileSize = (string)row[1];
        filePath = (string)row[2];
    }

};

вот как я создал сборку на сервере sql ..

CREATE assembly GetFileList from 'E:\NBM Sites\DontDelete\SampleCLRIntegration.dll' with permission_set = safe

и создал функцию sql, как показано ниже.

ALTER FUNCTION fn_GetFiles   
(  
    @folderPath nvarchar(max)  
)  
RETURNS TABLE   
(  
    [filename] nvarchar(max),  
    fileSize nvarchar(max),  
    filePath nvarchar(max)  
)  
AS EXTERNAL NAME GetFileList.UserDefinedFunctions.GetFileInfo;  

и вызывающая функция, как показано ниже.

select * from dbo.fn_GetFiles('E:\NBM Sites\DontDelete')

Как я могу исправить эту ошибку?

1 Ответ

0 голосов
/ 18 июня 2011

Вам необходимо установить «Внешний доступ», а не «БЕЗОПАСНЫЙ». См:

http://msdn.microsoft.com/en-us/library/ms345106.aspx

Попробуйте:

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